작은 메모장

쉘코드 분석 절차 본문

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

쉘코드 분석 절차

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

그래서 바인딩이 무엇인가?

일반적인 프로그램이 실행하면 메모리 공간이 부여

이후 로더가 프로그램을 읽고 그에 필요한 라이브러리를 호출하여 메모리에 적재

사용할 함수를 IAT에 등록시켜 프로그램이 사용할 수 있게 함

이 일련의 과정을 바인딩이라 칭함

 

이게 왜 문제?

바인딩 과정에 사용되는 로더는 LoadLibrary("Dll name"), GetProcAddress(DLL handler, "function name") 두 함수를 사용

쉘코드 또한 자기가 원하는 작업을 하기 위해서 라이브러리의 함수가 필요함

즉, 쉘코드 또한 바인딩 과정을 통해 사용하려는 함수의 주소값을 취득

이 과정에서 쉘코드는 로더로 바인딩을 하지 않고 스스로 바인딩을 함 -> 로더가 사용하는 두 함수를 똑같이 사용

= 분석하는 쪽에서 사용하는 함수 혹은 사용하는 문자열만 파악해도 쉘코드 판단이 용이

 

이런 치명적인 약점을 가리기 위해, 공격자는 문자열을 그대로 사용하는 것이 아닌,

사용하려는 함수명, DLL 파일 명 등을 Hash화 하여 사용

이를 API Hash라고 칭함

 

그럼 이걸 어떻게 막음?

분석가는 미리 쉘코드가 자주 사용하는 함수 및 DLL 파일 명을 전부 해시화 함

이를 테이블로 만들어서 이를 쉘코드와 비교

어느정도의 유사도를 가진 해시값이 자주 사용된다면 이를 의심스럽게 판단 가능