발자취
악성코드 02. Malware 행위 본문
실제 악성행위들이 어떤 종류가 있는지를 다룸
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을 로드함
이해하는데 도움이 된 게시글
악성코드 지속메커니즘
일반적으로 공격자는 윈도우가 재부팅되더라도 악성코드가 계속 실행되기를 바란다. 이러한 지속성을 유지하기 위해 윈도우가 시작될 때마다 악성코드를 실행할 수 있는 다양한 방법이 존재한
rninche01.tistory.com
'3-2 > 악성코드' 카테고리의 다른 글
| 악성코드 Pre-Lab1. 윈도우즈 메시지 후킹 (0) | 2023.09.29 |
|---|---|
| 악성코드 05. Anti-역공학 2 (0) | 2023.09.29 |
| 악성코드 04. Anti-역공학 1 (0) | 2023.09.18 |
| 악성코드 03. 데이터 인코딩 (0) | 2023.09.18 |
| 악성코드 01. 악성 윈도우즈 프로그램 분석 (0) | 2023.09.18 |