* 백도어

 

RAT

RAT는 원격 관리 도구, 영어로 풀어말하자면 Remote Administration Tool 이다. 원격에 있는 컴퓨터들을 관리할 때 사용한다. RAT는 정보를 훔치거나 정보를 다른 네트워크로 이동시키는 것과 같은 특정 목적을 가진 표적 공격에 사용한다.

RAT의 네트워크 구조는 우리가 생각하는 것과 조금 다르다.

RAT에서는 'Server'와 'Client'라는 용어를 사용하는데 이 용어가 우리가 생각하는 것과 차이가 있다는 것이다.

일반적으로 생각했을 때, RAT가 설치된 악의적인 PC가 'Server', 그리고 감염된 PC가 'Client'라고 생각할 수 있다. 하지만 이건 100% 반대이다.

 

'Server'는 악성 코드에 감염된 PC를 의미하며

'Client'는 RAT로 감염된 PC를 조정할 수 있는 PC (공격자의 PC)를 의미한다.

 

다시 설명하면 'Client'는 공격자가 조종하는 명령 및 통제 유닛으로 원격에서 실행된다. 'Sever'는 연결을 위해 'Client'에 신호를 전달하면 'Client'가 'Server'를 통제한다.

 

 

Bot Net

봇넷은 좀비로 알려진 침해 호스트의 집합으로 일반적으로 봇넨 컨트롤러로 알려진 'Server'를 통해 단일 객체에 의해 통제된다. 봇넷의 목표는 1. 추가 악성코드, 스팸 전파, 2. 분산 서비스 거부 공격 수행을 위한 큰 좀비 네트워크 구성위해 최대한 많은 호스트 침해 이다. 봇넷은 동시에 다수의 좀비 호스트가 웹사이트를 요청하게 함으로써 웹사이트를 다운시킬 수 있다.

 

 

RAT와 Bot Net의 비교

1. 봇넷은 다수의 호스트를 감염시키고 통제, RAT는 일반적으로 더 작은 규모의 호스트를 통제

2. 모든 봇넷은 한 번에 통제되는데 반해 RAT는 피해 호스트별로 통제

    이는 RAT의 경우 공격자가 개별 호스트에 대해 좀 더 많은 관심을 갖고 있기 때문

3. RAT는 표적 공격에 사용되는데 반해 봇넷은 대량 공격에 사용된다.

 

 

* 인증정보 탈취기

공격자는 인증정보를 훔치기 위해 여러가지 방법을 사용하며 이런 종류의 악성코드는 크게 3가지 유형이 있다.

 

1. 인증정보를 훔치기 위해 사용자가 로그인할 때까지 기다리는 프로그램

2. 인증정보를 훔치기 위해 윈도우에 저장돼 있는 정보(패스워드 해시)를 덤프하는 프로그램

3. 키 스트로크 (Key Stroke)를 로깅하는 프로그램

 

GINA 가로채기

마이크로소프트의 그래픽 인식과 인증 (GINA, Graphical Identification and Authentication) 가로채기는 윈도우 XP에서 악성코드가 사용자 인증정보를 훔치기 위해 사용하는 기법이다. 악성코드 제작자는 자신들의 인증정보 탈취기의 로딩을 위해 서드 파티 지원을 악용한다.

 

GINA는 DLL(msgina.dll)로 구현돼 있으며, 로그인 과정에서 Winlogon 실행 파일이 GINA를 로딩한다. 악성코드 제작자는 Winlogon과 GINA DLL 사이에 악성 DLL을 로딩 하도록 한다. 다음 레지스트리 위치를 제공한다.

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

 

예를 들어 GINA 인터셉터를 이용해 해당 레지스트리 위치에 설치된 악의적인 fsgina.dll 파일을 발견했다. 아래 구조는 로그온 인증정보가 Winlogon과 msgina.dll 사이에 있는 악의적인 파일을 이용해 시스템에 전달되는 예를 보여준다.

 

    Winlogon.exe => fsgina.dll => msgina.dll

 

악성코드 (fsgina.dll)는 인증을 위해 시스템에 전달되는 모든 사용자의 인증정보를 캡쳐할 수 있다. 악성코드는 디스크에 정보를 로깅하거나 네트워클 통해 전송할 수 있다.

 

fsgina.dll이 Winlogon과 msgina.dll 사이의 통신을 가로채고 있기 때문에 시스템이 정상적으로 계속 동작하기 위해 악성코드는 msgina.dll에 인증정보를 반드시 전달해야 한다. 그렇게 하기 위해 악성코드는 GINA에서 필요로 하는 모든 DLL 익스포트를 포함해야 한다.

 

특히 15개 이상의 함수를 익스포트해야 하며, 대부분의 함수명은 문자열 Wlx로 시작해야 한다. 확실하게 DLL을 분석하는 과정에서 Wlx로 시작하는 다수의 익스포트 함수를 발견한다면 이 힌트를 바탕으로 해당 DLL이 GINA 인터셉터임을 알 수 있다.

 

익스포트 대부분은 단순히 msgina.dll에 있는 실제 함수를 호출한다. fsgina.dll의 경우 WlxLoggedOutSAS 익스포트를 제외한 모든 익스포트는 실제 함수를 호출한다.

 

 

해시 덤프

윈도우 해시 덤프는 악성코드가 시스템 인증정보에 접근하기 위해 사용하는 대중적인 방법이다. 공격자는 오프라인에서 크랙하거나 해시 전달 공격에 사용하기 위해 윈도우 해시를 획득하고자 한다. 해시 전달 공격은 로그인에 필요한 평문 패스워드를 획득하기 위해 해시를 해독하거나 크랙할 필요 없이 LM과 NTML 해시를 사용해 NTLM 인증을 사용하는 원격 호스트를 인증한다.

 

pwdump는 보안 계정 관리자 (SAM, Security Account Manager)에서 로컬 사용자 계정의 LM (LAN Manager)와 NTLM (NT LanMan) 패스워드 해시를 출력하는 프로그램이다. pwdump는 로컬 보안 기관 하위시스템 (LSASS, Local Security Authority Subsystem Service) 프로세스 (lsass.exe로 더 잘 알려짐) 내부에 DLL 인젝션을 수행한다.

 

lsass.exe가 다수의 유용한 API 함수에 접근하는데 필요한 권한을 갖고 있기 대문에 해시 덤프 도구는 일반적으로 lsass.exe을 목표로 한다.

 

표준 pwdump는 lsaext.dll을 사용한다고 한다. lsass.exe 내부에서 실행되면 pwdump는 해시 추출을 수행하기 위해 lsaext.dll에서 익스포트된 GetHash를 호출한다. 시스템의 사용자를 열거하고, 각 사용자의 암호화되지 않은 형태의 패스워드 해시를 얻기 위해 비공식적인 윈도우 함수를 사용한다.

 

pwdump 변종을 다룰 때 해시 덤프하는 방법을 파악하려면 DLL을 분석해야한다. pwdump에서 사용되는 함수들 대부분은 동적으로 해석되기 때문에 해시 덤프 익스포트는 빈번하게 GetProcAddress를 호출한다.

 

# 참고

덤프 기술을 파악하는 것도 중요하지만 해시를 이용해 악성코드가 무엇을 하는지 파악하는 것이 더 중요할 수 있다. 악성코드가 해시를 디스크에 저장하는가, 웹사이트로 전송하는가, 또는 해시 전달 공격에 사용하는가? 이런 상세 내용이 정말 중요한 문제가 될 수 있다. 따라서 하위 수준의 해시 덤프 방법을 파악하는 것은 전체 기능을 파악하기 전까지는 자제해야 한다.

 

 

키 스트로크 로깅

키로깅은 인증정보 탈취의 전형적인 유형 중 하나다. 키로깅을 하면 공격자가 계정명과 패스워드 같은 타이핑된 데이터를 관찰할 수 있게 악성코드는 키 스트로크를 기록한다.

 

커널 기반 키로거

커널 기반 키로거는 사용자 모드 애플리케이션을 이용해 탐지하기 어렵다. 루트킷의 일부로 자주 사용되며 키 스트로크를 캡쳐하기 위해 키보드 드라이버처럼 가장하거나 사용자 공간 프로그램과 보호 장치를 우회한다.

 

사용자 공간 키로거

윈도우 사용자 공간 키로거는 일반적으로 윈도우 API를 이용하며 대부분 후킹이나 폴링을 이용해 구현하다.

 

후킹 방식은 키가 입력될 때마다 악성코드에 알리기 위해 윈도우 API (일반적으로 SetWindowsHookEx 함수) 를 사용한다. 후킹 기능을 실행하는 실행 파일로 패키징될 수 있으며, 시스템에서 다수의 프로세스에 매핑해 자동으로 로깅할 수 있는 DLL 파일을 포함할 수 있다.

 

폴링 방식은 계속적인 키 상태 기록을 위해 윈도우 API (일반적으로 GetAsyncKeyState와 GetForegroudWindow 함수)를 사용한다.

 

GetAsyncKeyState 함수는 키가 눌려졌는지 여부를 인식한 후 가장 최근의 GetAsyncKeyState 호출 이후 해당 키가 눌렸는지를 인식한다.

 

GetForegroundWindow 함수는 어떤 애플리케이션이 키보드 엔트리 (예를 들어 메모장, IE) 를 위해 사용되는지를 키로거에게 알려주기 위해 현재 사용중인 윈도우 (현재 포커스를 가진 윈도우) 를 파악한다.

 

# GetKeystate()와 GetSyncKeyState()에 대한 자세한 설명은 아래 블로그를 참고하면 참 좋다.

참고 블로그 URL : http://blog.eairship.kr/m/post/156

 

 

# pushA는 일반적으로 악의적인 코드가 악의적인 프로세스를 실행한 후 popA를 통해 복귀할 수 있게 레지스터의 초기 상태를 저장하는데 사용

 

 

+ Recent posts