작은 메모장
쉘코드 API 해시 패턴매칭_YARA 룰셋 본문
이 파일들은 전부 쉘코드로 크기가 매우 작음
보통 문자열 탐색을 진행 -> 탐지되지 않는다면 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를 사용하여 쉘코드 내부를 탐색
'KISA 사이버 보안 훈련 > 스피어피싱 대응 기본' 카테고리의 다른 글
쉘코드 디버깅 분석 실습_쉘코드 문자열 (0) | 2023.05.23 |
---|---|
쉘코드 디버깅 분석 실습_API 해시 패턴 매칭 (0) | 2023.05.23 |
쉘코드 분석 절차 (0) | 2023.05.22 |
쉘코드 개요 및 구성요소 (0) | 2023.05.22 |
악성 문서 파일의 구성 요소 (0) | 2023.05.21 |