작은 메모장

쉘코드 API 해시 패턴매칭_YARA 룰셋 본문

KISA 사이버 보안 훈련/스피어피싱 대응 기본

쉘코드 API 해시 패턴매칭_YARA 룰셋

으앙내눈 2023. 5. 22. 23:42

이 파일들은 전부 쉘코드로 크기가 매우 작음

보통 문자열 탐색을 진행 -> 탐지되지 않는다면 API Hash 탐색을 진행

이 순으로 진행

API Hash 탐색시 사용할 Yara Rule 값

공격자들도 바보가 아니기 때문에, 사용하는 Hash 알고리즘이 전부 다름

가장 많이 사용하는 알고지름은 ror13add로, 상기 4개의 쉘코드 또한 ror13add로 암호화 됨

Yara rule 내부 값

특정 문자로 시작하는 값이 있으면 이를 탐지하는 식으로 구성됨

이를 API 하나하나마자 설정하였음

Yara rule셋을 첫번째 파일에 적용시켜 감지가 되었음

사용한 API가 나왔으니 이를 해석하는 것이 가능

 

쉘코드 분석

쉘코드와 관련한 주요 API 및 라이브러리 함수는 다음을 따름

기능 주요 API 및 라이브러리 함수 보기
명령어 실행 CreateProcessA()
WinExec()
ShellExecute()
LoLBin/LotLBin을 활용하여 다양한 기능 수행
파일 다운로드 InternetReadFile() 파일 생성에 사용되는 함수가 사용되지 않고, VirtualAlloc()과 함께 사용된다면
코드 인젝션, Reflective DLL injection 수행 가능성 있음
DownloadToFileA() 다운로드 한 후 파일로 저장
보통 GetSystemDirectoryA(), GetWindowsDirectoryA(), GetTempPathA()등과 함께 사용
bitadmin을 실행하여 다운로드 WinExec(), ShellExecute()등을 이용하여 bitadmin을 실행하는 방법으로 파일 다운로드
계정 생성 NetUserAdd()
NetLocalGroupAddMembers()
혹은 net명령어를 실행
콘솔윈도우 감추기 GetConsoleWindow()
ShowWindow()
 
키로깅 SetWindowsHookExA()
GetMessageA()
TranslateMessage()
DispatchMessageA()
GetKeyState()및 socket함수들과 함께 사용
프로세스 토큰획득 OpenProcessToken()
LookupPrivilegeValueA()
AdjustTokenPrivileges()
 
재부팅 InitiageSystemShutdownA() 프로세스 토큰 획득 필요
파일 디코딩 CreateFileA()
GetFileSize()
SetFilePointer()
ReadFile()
WriteFile()
 
DLL 로드 LoadLibraryA()  
네트워크 통신 HTTPOpenRequest()
HTTPSendRequest()
 
socket()
connect()
send()
recv()
fopen()
fwrite()
closesocket()
소켓 함수는 스캐닝 등에도 사용
프로세스 walking CreateToolHelp32Snapshot()
Process32First()
Process32Next()
 
코드 인젝션 VirtualAllocEx()
WriteProcessMemory()
CreateProcessMemory()
대표적 방법 중 하나, 실제로는 더 다양함
SeDebugPrivilege토큰 획득을 위한 코드와 함께 사용

이를 확인하기 위해 IDA를 사용하여 쉘코드 내부를 탐색