KISA 사이버 보안 훈련/스피어피싱 대응 기본
쉘코드 분석 절차
으앙내눈
2023. 5. 22. 23:05
그래서 바인딩이 무엇인가?
일반적인 프로그램이 실행하면 메모리 공간이 부여
이후 로더가 프로그램을 읽고 그에 필요한 라이브러리를 호출하여 메모리에 적재
사용할 함수를 IAT에 등록시켜 프로그램이 사용할 수 있게 함
이 일련의 과정을 바인딩이라 칭함
이게 왜 문제?
바인딩 과정에 사용되는 로더는 LoadLibrary("Dll name"), GetProcAddress(DLL handler, "function name") 두 함수를 사용
쉘코드 또한 자기가 원하는 작업을 하기 위해서 라이브러리의 함수가 필요함
즉, 쉘코드 또한 바인딩 과정을 통해 사용하려는 함수의 주소값을 취득
이 과정에서 쉘코드는 로더로 바인딩을 하지 않고 스스로 바인딩을 함 -> 로더가 사용하는 두 함수를 똑같이 사용
= 분석하는 쪽에서 사용하는 함수 혹은 사용하는 문자열만 파악해도 쉘코드 판단이 용이
이런 치명적인 약점을 가리기 위해, 공격자는 문자열을 그대로 사용하는 것이 아닌,
사용하려는 함수명, DLL 파일 명 등을 Hash화 하여 사용
이를 API Hash라고 칭함
그럼 이걸 어떻게 막음?
분석가는 미리 쉘코드가 자주 사용하는 함수 및 DLL 파일 명을 전부 해시화 함
이를 테이블로 만들어서 이를 쉘코드와 비교
어느정도의 유사도를 가진 해시값이 자주 사용된다면 이를 의심스럽게 판단 가능