발자취

악성코드 02. Malware 행위 본문

3-2/악성코드

악성코드 02. Malware 행위

해린 2023. 9. 18. 17:48

실제 악성행위들이 어떤 종류가 있는지를 다룸

 

1. Downloader와 Launcher

1. Downloader

대부분의 맬웨어는 바로 실행되는 게 아니라 서버에서 필요한 애들을 다운 받아와서 실행함.

모든 악성 행위를 실행 파일에 다 담으면 너무 크고, 탐지도 쉬워지기 때문

 

- 인터넷상에서 malware의 일부분을 다운로드해서 lodal 시스템에서 실행함

- 종종 Exploit으로 패키지 됨

- 일반적인 사용법: Windows API인 URLDownloadtoFileA과 WinExec에 대한 호출을 순서대로 사용하여 새로운 malware를 다운로드하고 실행함

 

 

2. Launcher (Loader)

- 즉각적인 또는 미래의 비밀 실행을 위해서 malware를 설치하는 실행파일

 

 

 

2. Backdoor

1. 개념

실제로 악성 행위를 하기 보단 악성행위를 실행하기 위한 통로를 만드는 행위를 함!

 

- 희생자 기기에 대한 원격 액세스를 공격자에게 제공하는 malware

- 일반적으로 추가적인 malware 코드를 다운로드 할 필요 없음

- 일반적인 통신은 HTTP 프로토콜 (port 번호: 80) 상에서 이루어짐

- Registry key 조작 및 처리, 파일 탐색, 디렉토리 생성과 같은 기능 수행

 

 

2. Reverse Shell

- 일반적인 방식과 다르게 감염된 기기에서 공격자로 연결이 맺어짐

- 공격자에게 해당 감염 기기에 대한 shell access 권한을 부여함

- Netcat Reverse Shell: reverse shell을 생성할 때 사용될 수 있음

   → 쉘을 통해서 한번 맺어지면(타겟->공격자), 공격자가 원하는 명령어를 사용(공격자->타겟). 처음에만 타겟->공격자로 연결 맺고 쭉 공격자->타겟

- Windows Reverse Shell: cmd.exe를 사용하는 윈도우 상의 reverse shell 구현 방법 basic, multithreaded

- RATs (Remote Administration tool): 원격으로 한 개 이상의 컴퓨터들을 관리하는데 사용됨

- Botnets: botnet controller가 제어하는 zombie 호스트들로 구성된 네트워크

 

 

3. RATs vs. Botnets

- Botnets: 아주 많은 수의 호스트들을 감염, 통제하면, 한 번에 제어됨

- RATs: 상대적으로 적은 수의 호스트들을 통제하며, 개별 victim 기반으로 통제가 수행됨.

 

 

 

3. Credential Stealer

1. 개념

- 중요한 사적 정보인 credential을 탈취하는데 세 개 malware (GINA Interception, Hash Dumping, Keystroke Logging) 사용

- GINA Interception: credential을 탈취하기 위해서 사용자가 로그인 하기를 기다리는 malware 프로그램

- Hash Dumping: Windows에 저장된 패스워드나 해시같은 정보를 dump하는 프로그램

- Keystroke Logging: Keystorke를 기록하는 프로그램

 

 

2. GINA Interception

- GINA: RFID 토큰 또는 스마트 카드를 이용하는 인증기법 같은 로그온 프로세스를 합법적인 third-party에게 허용하기 위해 제안됨

- Malware는 credential stealer 로드를 위해서 GINA의 third-party 지원을 이용함

- GINA는 msgina.dll 파일에 구현됨

 

- Winlogon은 third-party customization을 Winlogon과 msfina.dll 사이에서 로드하며, third-party DLL이 로드되는 regstry 위치

   → HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL

 

 

3. Hash Dumping

- Malware가 시스템 credential을 액세스하는데 사용되는 방법

- Dump된 해시를 오프라인상에서 crack하거나 pass-the-heash 공격에 적용함

- Pass-tje-hash 공격: 해시를 crack하거나 복호화하지 않고 로그인에 필요한 패스워드를 획득

- Pwdump, Pass-the-Hash (PSH) toolkit: hash dumping을 제공하는 free 패키지

- Pwdump: Security Account Manager (SAM)로 부터 지역 사용자 계정의 LM과 NTLM 패스워드 해시를 출력하는 프로그램들의 집합

 

 

4. Keystroke Logging

- 키보드에서 타입되는 키값들을 로그하는 공격

- 커널 기반 Keylogger와 사용자 영역 Keylogger가 있음

- 커널 기반 Keylogger: 루트킷의 일부로써 키보드 드라이버로 동작하는 겅우 많음

- 사용자 영역 Keylogger: hooking이나 polling 기법을 사용해서 구현함

 

- Hooking 기법: Windows API (예: SetWindowsHookEx 함수)를 사용해서 키가 눌러질때마다 malware에게 통보하게 함

- Polling 기법: Windows API (예: GetAsyncKeyState, GetForegroundWindow 함수)를 사용해서 지속적으로 키들의 상태를 확인함

- GetAsyncKeyState: 키가 눌러졌는지 아닌지 여부를 확인함

- GetForegroundWindow: 어떤 애플리케이션이 키보드 엔트리를 위해서 사용되는지를 keylogger에게 알려주는 foreground 윈도우를 식별함

 

 

 

 

4. Persistence 기법

1. 개념

- Malware가 victim 기기에 오랫동안 지속적으로 동작하도록 만드는 기법

- persistence 기법: Windows Regisrty, AppInit_DLL

 

 

2. Windows registry

- Malware가 registry를 액세스해서 configuration(설정) 정보를 저장하고, 시스템에 관한 정보를 수집하고, malware 자신을 지속적으로 설치할 수 있음.

- Malware가 자신을 install하는데 많이 사용하는 registry

 

 

3. AppInit_DLL

- Malware는 AppInit_DLL이라는 특별한 registry를 통한 DLL들에 대한 지속성을 확보함

- AppInit_DLL: User32.dll을 로드하는 모든 프로세스에 AppInit_DLL이 로드됨

   → User32.dll은 디폴트 DLL이라 거의 모든 프로세스에 로드됨

 

 

4. Winlogon Notify

- Malware는 특별한 Winlogon 이벤트 (logon, logoff, startup, shutdown, lock screen)에 hook 될 수 있음

- winlogon.exe가 이벤트를 생성할 때, 윈도우는 이벤트를 처리할 DLL을 위한 Notify 레지스트리 키를 체크함

 

 

5. SvcHost DLL

- Malware를 svchost.exe DLL로 설치하는 것은 Malware를 프로세스 리스트와 레지스트리로 혼합시켜서 지속성 측면에서 좋음

- Svchost.exe: DLL로부터 동작하는 서비스들을 위한 일반적인 호스트 프로세스

 

 

6. Trojanized System Binaries

겉으로 봐서는 악성행위가 아닌 것처럼 보이지만 알고보면 악성행위 중

 

- 시스템 바이너리를 트로이화 하는 방법

- Malware가 시스템 바이너리의 바이트들을 패치하면, 감염된 바이너리가 다음 번에 실행되거나 로드될 때, 시스템이 malware를 실행시킴

- DLL 파일: 시스템 바이너리 트로이화에 많이 사용됨

 

- Enrty 함수: 맨 처음 시작되는 함수

- Malicious Code: 원래 없던 앤데 패치시킴. 다른 방법을 통해 가져다 붙인 것

- Malware: Malicious Code가 다른 곳에 있는 Malware를 실행시킴

   → 결과적으로 Malicious Code 자체는 나쁜 행동을 하지 않으니까, 겉보기에는 정상적인 행동을 하는 것처럼 보이지만 사실 악성코드를 실행시키는 일을 하고 있음.

 

 

7. DLL Load-order Hijacking

- 레지스트리 엔트리 또는 트로이화된 바이너리 없이 지속적이고 악의적인 DLL을 만드는 기법

- Windows XP 상에서 DLL을 로드하는데 있어ㅓㅅ 기본 탐색 순서

   1) 애플리케이션이 로드된 디렉토리

   2) 현재 디렉토리

   3) System 디렉토리

   4) .../Windows/System/가 같은 16비트 시스템 디렉토리

   5) Windows 디렉토리

   6) PATH 환경 변수에 리스트된 디렉토리들

 

   Q.  왜 이런 기본 탐색 순서가 필요한가? 

   A. DLL에 같은 이름을 가진 다른 파일, 다른 이름을 가진 같은 파일이 존재할 수 있기 때문에 기본 탐색 순서에 따라 차례로 디렉토리를 확인해야 함.

 

그렇다면 DLL Load-order Hijacking는 어떻게 이루어질까? (Hijacking == 탈취)

→ DLL이 로딩되는 순서를 바꿔치기 함

 

- Windows XP 환경하에서 DLL 로드 탐색 순서는 KnownDLLs에 의해 무시될 수 있음.

- KnownDLLs: 보안과 속도를 향상시키기 위해 도입됨.

- KnownDLLs이 사용되면 악의적인 DLL은 로드 순서에서 더 높은 곳에 위치할 수 없음

- DLL Load-order 하이재킹 공격은 /System32이 아닌 디렉토리들에 있는 바이너리를 대상으로 발생할 수 있음

    - 해당 바이너리들은 KnownDLLs에 의해 보호 받지 못하는 /System32에 있는 DLL을 로드함

 

 

이해하는데 도움이 된 게시글

https://rninche01.tistory.com/entry/%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C-%EC%A7%80%EC%86%8D%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98

 

악성코드 지속메커니즘

일반적으로 공격자는 윈도우가 재부팅되더라도 악성코드가 계속 실행되기를 바란다. 이러한 지속성을 유지하기 위해 윈도우가 시작될 때마다 악성코드를 실행할 수 있는 다양한 방법이 존재한

rninche01.tistory.com