악성 코드

리버싱 2019. 11. 22. 17:51

1. 악성 코드

  - 악의적인 동작을 실시하기 위해서 개발한 프로그램 / 실행 파일 

  - 일반적으로 EXE 실행 파일로 배포가 되거나 , 스크립트를 포함한 문서형 파일로 배포된다.

 

 

2. 악성 코드 배포 목적

  - 공공 기관 , 국가 기관 , 민간 기업 , 학교 등 기밀 정보를 탈취하기 위해서 배포함

  - 개인 정보 수집 및 변조 , 신분 도용 등을 위해서 배포함

  - 시스템 파괴 , 데이터 파괴 , 서비스 공격 ( Dos / DDos )를 하기 위해서 배포함

  - 랜섬웨어와 같은 금전 요구를 하기 위해서 배포함

  - 광고 노출 및 홍보 수단을 위해서 배포함

 

 

3. 악성 코드 분석 방법

  1) 패킹 여부 분석

    - 실행 파일이 패커에 의해서 패킹되었는지 확인해야 한다.

    - 대부분의 악성코드는 패킹되어 배포되기 때문에 악성 코드 초기 분석 단계에서 꼭 실시되어야 한다.

    - 분석 도구 : exeinfope , PEview , OllyDbg , ImportREC , LordPE

 

  2) 기초 정적 분석

    - 악성 코드 파일을 실행하지 않고 , 간략하게 분석하는 방법이다.

    - 악성 코드 분석시 가장 먼저 실시해야한다.

    - 프로그램 기능 / 흐름을 파악하기 위해서 코드 , 문자열 , DLL / 함수 , 헤더 , 프로그램 구조를 분석하여 목록화 해야

      한다.

    - 분석 도구 : exeinfope , PEview , CFF Explorer ,  Dependency Walkers , strings , bintext , RegScanner , PEStudio

      바이러스 토탈 사이트

 

  3) 기초 동적 분석

    - 악성 코드 파일을 실행하고 간략하게 분석하는 방법이다.

    - 악성 코드 파일을 실행하기 위한 가상환경을 준비해야 하며 , 악성코드 이전에 스냅샷을 생성한다.

    - 악성코드 실행 전후 상태를 조사 및 분석하는 것이 목적이다.

    - 분석 내용 : 호스트 기반 , 네트워크 기반 ,  파일 생성 및 삭제 유무 , 다운로드 파악 , 레지스트리 등록

      서비스 등록 변경 사항 확인

    - 분석 도구 : procexp , procmon , Regshot , SysAnalyzer , Wireshark , NetworkMiner...

 

  4) 고급 정적 분석

    - 악성 코드 파일을 실행하지 않고 , 상세하게 분석하는 방법이다.

    - 악성 코드가 갖고 있는 명령어가 하는 작업이 무엇인지 파악하기 위해서 실행 파일을 디스어셈블리로

      로드해서 악성 코드 내부를 리버싱 하는 방법이다.

    - 분석 내용 : 어셈블리 명령어 , 루틴 파악 , 사용하는 DLL/함수 분석 , 문자열 분석

    - 분석 도구 : IDA 

 

  5) 고급 동적 분석

    - 악성 코드 파일을 실행하고 상세하게 분석하는 방법이다.

    - 고급 정적 분석 내용을 기반으로 디버거를 통하여 동작하는 악성코드의 내부 상태를 파악하는 방법이다.

    - 분성 방법 : 어셈블리 명령어 및 루틴 파악 , 사용하는 DLL/함수 분석 , 고급 정적 분석에서 파악하지 못한 내용 파악

    - 분석 도구 : OllyDbg

 

  6) 자동화 분석

    - 가상 환경에서 악성 코드를 실행하여 자동으로 분석하는 방법이다.

    - 자동화 분석으로 진행하면 분석 시간 및 노동은 단축 되지만 , 누락된 정보가 있을 수 있다.

    - 분석 도구 : 쿠쿠 샌드 박스  , 하이브리드 애널리시스 사이트 

 

 

4. 악성 코드 유형

 

  1) 백도어

    - 공격자의 접근을 허용하기 위한 목적으로 시스템 자체적으로 설치하는 악성코드

    - 그렇게 때문에 공격자는 백도어를 통하여 시스템을 비정상적으로 로그인하여 명령을 수행할 수 있다.

  

  2) 다운로더

    - 다운로더가 실행되면 특정 사이트로부터 악서오드를 다운로드하고 특정 디렉터리에 복사하여 실행하는 악성코드이

      다.

    - 사용자가 다운로드 받아서 자동으로 실행하거나 , 직접 실행하거나 , 공격자가 백도어를 통해서 접속하여 다운로더

      를 설치할 수 있다.

   

  3) 드롭퍼

    - 악성 파일 리소스 영역에 저장된 데이터를 이용하여 새로운 악성 코드를 생성하는 악성코드이다.

    - 사용자가 드롭퍼를 실행하면 악성 코드 파일이 생성된다.

 

  4) 바이러스

    - 프로그램을 통하여 감염 / 전염되는 악성코드이다.

    - 바이러스가 실행되면 파일의 PE 구조를 변경하거나 코드를 삽입하여 파일이 실행될 경우 악의적인 동작을 실시

      한다.

    - 또한 , 디스크의 MBR , VBR 영역을 손상시키는 동작도 가능하다.

   

  5) 웜

    - 시스템 / 서비스 취약점을 이용하여 네트워크를 통해서 다른 시스템들도 감염시키는 악성코드이다.

    - 프로그램을 통하여 감염되는 바이르서와 다르게 악의적인 코드가 스스로 복제되어 네트워크 상으로 전달되며 ,

      파일 / 디스크 뿐만 아니라 네트워크 부하도 발생시킨다.

 

  6) 트로이 목마

    - 공격자가 의도하는 바를 위하여 대상을 속인 다음 , 실행될 경우 숨겨져 있던 악의적인 동작을 실시하는 악성코드

      이다.

    - 대신 바이러스처럼 파일을 조작하거나 , 웜처럼 네트워크를 통해서 전파되지는 않는다.

 

  7) 파일리스

    - 파일이 없는 악성코드 , 레지스트리에 등록되는 악성코드

    - 악의적인 동작을 실시하는 파일이 존재하지 않고 , 메모리에 로드되어 동작하는 악성코드이다.

    - 주로 문서형 파일로 배포됨

    

  8) 랜섬웨어

    - 금전을 요구하기 위해서 파일 및 디스크를 암호화 / 파괴를 실시하는 악성코드이다.

    - 랜섬웨어에 감염되면 파일 및 디스크를 복구하기 위해서 키를 요구하며 , 키는 금전을 지불해야 받을 수 있다.

    

  9) 봇넷

    - 공격자가 시스템에 접속할 수 있는 점에서 백도어와 비슷하지만 , 동일한 봇넷에 감염된 모든 컴퓨터가 CnC 서버로

      부터 명령을 받아 실행하는 프로그램이다.

 

  10) 루트킷

    - 다른 코드 내에서 자신의 존재를 숨기는 악성코드이다.

    - 공격자의 원격 접속을 혀용할때 사용하거나 , 다른 악성코드 탐지를 방해하기 위해서 사용한다.

   

  11) 스파이웨어

    - 사용자 동의 없이 설치되어 시스템 정보를 수집하고 전송하는 악성코드이다.

    - 감염되지 않지만 , 유해 프로그램으로 탐지된다.

 

  12) 애드웨어

    - 스파이웨어에 일종이며 , 단순하게 광고 목적으로 배포되는 악성코드이다.

    - 프로그램이 설치될때 , 광고가 실시되는 프로그램이 같이 설치된다.

 

  13) 스케어웨어

    - 바이러스가 감염된 것처럼 조작하여 바이러스 백신 프로그램을 구매하도록 유도하는 악성코드이다.

   

5. 기본적인 DLL

 

  1) KERNER32.dll

    - 메모리 , 파일 , 하드웨어 접근 및 조작과 같은 기능을 갖고 있음

 

  2) ADVAPI32.dll

    - 서비스 관리자 , 레지스트리 키 값 설정과 같은 윈도우 접근 기능을 갖고 있음

 

  3) USER32.dll

    - 아이콘 , 버튼 , 스크롤바 , 사용자 동작 행위와 같은 인터페이스 기능을 갖고 있음

 

  4) GDI32.dll

    - 그래픽 보기 , 조작 관련 함수를 갖고 있음

 

  5) WSOCK32.dll , WS2_32.dll

    - 네트워크 연결 및 네트워크 관련 작업 기능을 제공한다.

 

  6) WININET.dll

    - HTTP , FTP 프로토콜을 구현한 상위 계층 네트워크 관련 기능을 제공한다.

 

  7) NTDLL.dll

    - 윈도우 커널 인터페이스이다.

    - 실행 파일은 NTDLL.dll에서 제공하는 함수들을 직접 Import는 불가능하다.

    - KERNEL32.dll을 통해서 간접적 Import 방식을 이용한다.

 

[ 참고 ] 함수에 Ex , A , W

  - Ex : 새로운 함수가 기존 함수와 이름이 같은 경우 

  - A :  ASCII 문자열 및 32bit 의미

  - W : Wide Character String 문자열

'리버싱' 카테고리의 다른 글

Back Door  (0) 2019.11.25
어셈블리 (배열)  (0) 2019.11.15
어셈블리 ( 함수 )  (0) 2019.11.15
어셈블리 ( 구조체 )  (0) 2019.11.15
어셈블리 ( 스택 프레임)  (0) 2019.11.14

설정

트랙백

댓글