선릉역 1번 출구

Malicious windows program analysis 본문

Hacking & Security/Malicious code and Reversing

Malicious windows program analysis

choideu 2021. 12. 1. 14:22

1. Windows api

windows api를 통해 마이크로소프트 라이브러리를 액세스함 -> 정확하게 제공하는 서비스는 https://ko.wikipedia.org/wiki/%EC%9C%88%EB%8F%84%EC%9A%B0_API 참고

악성코드도 windows api를 사용해 마이크로소프트 라이브러리를 액세스함

type, handle, file system function, special file들로 구성되어 있음

type(word, dword, handles, long pointer, callback), handle, file system function(create file/read file/write file/createFileMapping/MapViewOfFile), special file(공유 파일, namespace를 통해 access 가능한 파일, ADS)

 

+ADS란 Alternate Data Stream의 약자로 NTFS 구조에서는 다중의 데이터 스트림을 지원하는데, 이러한 데이터 스트림이 여러개라는 것은 파일이 하나 이상의 데이터를 담을수 있다는 것이다. 이를 이용하여 원하는 데이터를 다른 파일 안에 숨길 수가 있다. 

출처. https://kali-km.tistory.com/entry/ADS

출처: https://kali-km.tistory.com/entry/ADS [Kali-KM_Security Study]

handle에 대한 이해는 https://m.blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=tipsware&logNo=221065382244&proxyReferer=참고

 

2. Windows registry

윈도우 레지스트리(Windows Registry)는 마이크로소프트 윈도우 32/64비트 버전과 윈도우 모바일 운영 체제의 설정과 선택 항목을 담고 있는 데이터베이스로, 모든 하드웨어, 운영 체제 소프트웨어, 대부분의 비운영 체제 소프트웨어, 사용자 PC 선호도 등에 대한 정보와 설정이 들어 있다.

->운영체제와 프로그램 설정 정보를 저장하는데 사용됨

->악성코드는 지속을 위해 registry를 사용함->5개의 root key(HKLM, HKCU, HKCR, HKU, HKCC)

 

root key에 대한 자세한 내용은 https://bamsky.tistory.com/12 참고

registry function(RegOpenKeyEx/RegSetValueEx/RegGetValue): malware는 registry를 수정하기 위해 registry 함수를 사용

 

3. DLL(dynamic link libraries)

동적 링크 라이브러리(영어dynamic-link libraryDLL)는 마이크로소프트 윈도우에서 구현된 동적 라이브러리이다. 내부에는 다른 프로그램이 불러서 쓸 수 있는 다양한 함수들을 가지고 있는데, 확장DLL인 경우는 클래스를 가지고 있기도 한다. DLL은 COM을 담는 그릇의 역할도 한다.

->code reuse 기법->소프트웨어의 크기를 줄일 수 있음-> DLL에 의해 사용되는 메모리는 동작중인 process들에 의해 공유 가능

malware는 악성코드 저장, windows dll, third-party dll으로 dll을 사용함

기본적인 DLL structure = PE file format/dllmain/대부분의 dll은 per-thread resource를 갖지 않음

=>per thread resource는 말 그대로 스레드별로 resource를 갖지 않는다는 말인듯하다.

 

4. Process

윈도우 운영체제에 의해 실행되는 program. 정적인 상태를 program이라고 하고 동적인 상태를 process라고 함

process: 한 개 이상의 스레드를 가짐

기존 malware는 독립적인 프로세스를 가졌지만, 최신 malware는 자신의 코드를 다른 프로세스의 일부로써 실행함

 

5. Thread

CPU에 의해 실행되는 독립적인 명령어들의 sequence임

스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다.

 

thread에 대한 자세한 내용은https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85) 참고

thread와 process: https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html 참고

 

6. Service

Malware가 추가적인 코드들을 실행하는 방법

추가적인 코드들을 service로 설치하고, task가 background application으로 수행될 수 있게 함.

->linux의 background를 생각할 수 있겠다. 명령어 + &

malware가 service를 사용하면 지속성을 얻을 수 있고 은닉 가능, 상승된 권한을 가진 계정으로 실행된다는 장점이 있음

 

https://rninche01.tistory.com/314 의 9. 서비스 참고

 

7. Component object model

서로 다른 소프트웨어 컴포넌트들이 서로 호출하는 것을 가능하게 만든 표준 인터페이스임

클라이언트/서버 프레임 워크로 구성

client: COM객체를 사용하는 프로그램

server: 재사용 가능한 소프트웨어 컴포넌트

malware는 COM을 사용할 수 있음

 

COM: https://blog.naver.com/mir8725/221887428235

component: http://wiki.hash.kr/index.php/%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8

'Hacking & Security > Malicious code and Reversing' 카테고리의 다른 글

Anti Disassembly  (0) 2021.12.15
Windows Message Hooking(2)  (0) 2021.12.12
Windows Message Hooking  (0) 2021.12.09
Packers & Unpacking  (0) 2021.12.01
Malware type  (0) 2021.12.01
Comments