목록분류 전체보기 (119)
작은 메모장
그래서 이거 어떻함? zlib으로 압축했으니, 다시 압축해제하면 됨 압축을 해제하는 python코드의 일부 if문으로 파일의 데이터를 받아오고 압축해제한 데이터를 다시 쓰는 코드형태 인자값을 알맞게 주어 압축해제를 진행 정상적으로 압축이 풀린 모습을 볼 수 있음 스크립트 분석 PostScript는 stack형 스크립트 언어로, 일반적인 프로그래밍 언어와 상당히 다른 문법을 보임 보통 프로그래밍 언어에서, 변수 a를 1로 지정하고 싶다면 int a = 1 인 기본적인 언어를 떠올림 하지만 PostScript는 다르게 동작함 GS>/a GS1 GSdef 이 코드는 PostScript의 인터프리터인 ghostscript의 a = 1을 선언하는 코드임 앞서 ghostscript는 stack형 언어라고 이야기함 ..
하나의 예시를 보자 일반적인 한글 파일 그러나 이를 실행하게 되면 윈도우 시작 프로그램에 이상한 파일이 생긴것을 확인 가능 또, 문서 상단 알수없는 크기의 영역이 잡힌 것을 확인 가능 이것이 바로 PostScript로 공격을 시행한 것임 PostScript? 어도비에서 만든 언어 각종 고화질 벡터 이미지를 표현 가능 어떻게 악성 코드가 생긴 것? 악성 PostScript가 주입된 HWP문서를 열람하게 되면 HWP 프로세스가 실행 실행된 HWP 프로세스는 문서를 파싱하여 사용자에게 뷰로 보여줌 HWP는 문서를 뷰로 처리하는 과정에서, PostScript가 있는지 확인 있다면, ghostscript를 실행 함 (ghostscript는 PostScript를 해석하는 인터프리터) 실행된 ghostscript는 ..
악성 HWP 문서의 유형 - Post Script 문서 내에 ".EPS" 혹은 ".PS"확장자를 가진 파일이 존재, 해당 파일 안에 악성 포스트 스크립트가 존재 - Exploit 문서 내에 쉘 코드 바이너리가 포함, Exploit에 의해 임의로 동 - Binary File Embed 문서 내에 PE, SHF, OLE등의 포맷의 파일이 존재 - Macro 문서 내에 악성 자바스크립트 코드를 포함한 스트림이 존재 Post Script 일반적으로 포스트 스크립트는 암호화 되어 있으며, 반복문을 통해 복호화 작업을 수행 복호화가 끝난 스크립트는 "프로세스 인젝션을 통한 쉘코드 삽입" 혹은 "파일시스템 조작"등의 공격을 시행 Exploit 데이터가 무질서함, NOP(No Operation)코드가 존재할 수 있음,..
디버깅을 수행하기 위해 32비트 디버거를 실행 일반 프로그램인 메모장을 실행하였음 쉘코드는 일반 프로그램의 메모리 공간안에 메모리 공간을 injection하므로, 이를 그대로 수행 데이터상의 변화는 없지만 메모리 공간이 할당된 상태 여기에 쉘 코드 자체를 주입시킴 성공적으로 주입이 되었음 단, EIP레지스터는 여전히 노트패드 프로그램의 시작점을 가리키고 있음 그러나 쉘코드가 원하는 시작지점은 따로 존재함 때문에 쉘코드가 원하는 시작지점으로 EIP를 설정함
앞서 이 쉘코드는 인터넷 연결을 통해 데이터를 다운로드 후 메모리 공간에 적재하고 Http통신을 통해 C2통신을 함을 알았음 정확히 어떤 도메인을 통해 통신을 하는 것인지 추가적으로 분석 문자열 분석 Hex Editer로 분석하면, /iWWE라는 데이터가 보임 이는 HTTP의 URL패턴 또한, baidu.com이라는 도메인 또한 보임 이곳에서 공격이 이루어짐을 짐작할 수 있음 User-Agent라는 데이터를 추가로 발견 이는 Http 요청 메시지의 헤더값 중 하나 요청 시 브라우저의 버전 및 종류를 나타냄 이를 통해 쉘코드는 HTTP 요청을 사용하고 있음을 예상할 수 있음 직접적인 IP 데이터가 보임 이는 C2 시스템의 아이피일 가능성이 매우 높음 하지만 이는 어디까지나 예상하는 정보로, 정확한 정보는 ..
문제의 쉘코드를 IDA를 통해 분석 어셈블리 코드 형태로 강제 변환한 쉘코드 내부 구조 복호화를 위한 루프또한 보임 이를 통해 이 파일은 쉘코드임을 확신하고 분석 시작 Hax Editer를 사용하여 문제의 값을 찾음 이런식으로 나머지 API또한 찾을 수 있음 쉘코드 행위 분석 VirtualAlloc() 함수는 Heap 메모리를 할당할 때 사용하는 함수 InternetConnectA()함수는 인터넷으로 특정 데이터나 파일을 가져오는 함수 따라서 이 쉘코드는 종합적으로, 정상 실행되는 프로세스를 종료시키고 에러를 발생 시킨 뒤 사용하려는 라이브러리를 로드 후 가상 메모리 생성 이후 Http연결을 통해 인터넷에서 특정 파일을 다운로드 및 실행 하는 과정을 하는 것으로 판단
이 파일들은 전부 쉘코드로 크기가 매우 작음 보통 문자열 탐색을 진행 -> 탐지되지 않는다면 API Hash 탐색을 진행 이 순으로 진행 API Hash 탐색시 사용할 Yara Rule 값 공격자들도 바보가 아니기 때문에, 사용하는 Hash 알고리즘이 전부 다름 가장 많이 사용하는 알고지름은 ror13add로, 상기 4개의 쉘코드 또한 ror13add로 암호화 됨 Yara rule 내부 값 특정 문자로 시작하는 값이 있으면 이를 탐지하는 식으로 구성됨 이를 API 하나하나마자 설정하였음 Yara rule셋을 첫번째 파일에 적용시켜 감지가 되었음 사용한 API가 나왔으니 이를 해석하는 것이 가능 쉘코드 분석 쉘코드와 관련한 주요 API 및 라이브러리 함수는 다음을 따름 기능 주요 API 및 라이브러리 함수..
그래서 바인딩이 무엇인가? 일반적인 프로그램이 실행하면 메모리 공간이 부여 이후 로더가 프로그램을 읽고 그에 필요한 라이브러리를 호출하여 메모리에 적재 사용할 함수를 IAT에 등록시켜 프로그램이 사용할 수 있게 함 이 일련의 과정을 바인딩이라 칭함 이게 왜 문제? 바인딩 과정에 사용되는 로더는 LoadLibrary("Dll name"), GetProcAddress(DLL handler, "function name") 두 함수를 사용 쉘코드 또한 자기가 원하는 작업을 하기 위해서 라이브러리의 함수가 필요함 즉, 쉘코드 또한 바인딩 과정을 통해 사용하려는 함수의 주소값을 취득 이 과정에서 쉘코드는 로더로 바인딩을 하지 않고 스스로 바인딩을 함 -> 로더가 사용하는 두 함수를 똑같이 사용 = 분석하는 쪽에서 ..