1. 코드 서명 확인

$ codesign -dvvvv -r - [app_name.app/]

codesign 내용을 출력해준다. bundle Identifier와 TeamIdentifier(Apple Developer Signing Certificate)는 탐지 소프트웨어에서 사용될 수 있기 때문에 분석 초기에 확인해서 기록해놓는 것이 좋다.

2. 개발자 인증서 유효성 확인

$ spctl --verbose=4 --assess --type execute [app_name.app]

파일의 code signature가 더이상 유효하지 않은 경우 CSSMERR_TP_CERT_REVOKED 가 출력된다. 가짜 및 불량 개발자 계정으로 서명할 수도 있기 때문에 code signature 자체에는 큰 의미가 없지만, app을 실행하려고 하면 Gatekeeper와 XProtect에 의해 체크되기 때문에 bypass하여 실행하지 않는 한 위조 서명은 걸러진다.

3. Info.plist 확인

$ plutil -p Info.plist

샘플을 실행할 최소 Mac OS 요구 버전, malware 작성자가 빌드시 사용한 Mac OS 버전 및 빌드 번호 등 유횽한 정보를 얻을 수 있다.

4. 파일의 메타 데이터 수집

$ file [file_name]

해당 파일이 어떤 파일인지 알려준다. ex) Mach-O 64-bit executable x86_64, ASCII text 등등

$ ls -al@ [file_name]

파일의 확장된 속성 및 권한을 나열해준다.

$ xattr -l [file_name]

ls -al~과 유사한 역할을 한다.

$ mdls [file_name]

Spotlight 및 Finder가 보유한 메타 데이터를 나열해 준다.

5. Mach-O binary 내부 구조 확인

$ pagestuff [mach-o_binary_name] -a

해당 binary가 각 page 별로 어떤 section(segment의 구성 요소)을 포함하고 있는지, 어떤 함수 symbol들이 있는지 확인할 수 있다. __TEXT segment의 __text section에는 모든 실행 가능한 function 및 method가 포함되어 있기 때문에 중요하게 확인해봐야 한다.

$ nm -m [mach-o_binary_name]

해당 binary에 연결된 모든 함수 symbol에 대해 보여준다. pagestuff는 공유 라이브러리에 대한 symbol은 확인할 수 없지만 nm -m 을 이용하면 모두 확인이 가능하다.

6. ‘strings’ utility를 이용한 정적 분석

$ strings - [mach-o_binary_name] > [outputfile_path/outputfile_name]

strings를 사용하면 ASCII 문자열을 binary 에서 텍스트 파일로 덤프하여 쉽게 보고 조작할 수 있다. 위와 같이 ‘-‘ 를 옵션으로 주게되면 binary의 모든 byte에서 문자열을 찾아서 덤프한다. Linux의 strings 와 Mac OS 버전의 strings는 완전히 다르다는 점에 유의해야 한다. 특히 유니코드를 디코딩 할 수 없기 때문에 floss 같은 것을 사용해야할 수 있다.

7. ‘Otool’ 을 사용한 binary 검사

$ otool -L [mach-o_binary_name] > [outputfile_path/outputfile_name]

otool은 [OSXInternals] 포스트에서 언급한 바와 같이 다양한 작업들을 수행할 수 있는 강력하고 유용한 툴이다. 위와 같이 ‘-L’ 옵션을 사용하면 해당 binary가 어떤 공유 라이브러리들을 사용하는지 확인할 수 있다.

$ otool -oV [mach-o_binary_name] > [outputfile_path/outputfile_name]

‘-oV’ 옵션을 붙이면 binary의 ObjC section에서 메소드 이름을 덤프할 수 있다.

$ otool -tV [mach-o_binary_name] > [outputfile_path/outputfile_name]

‘-tV’ 옵션을 주면 binary를 disassemble 할 수 있다.

8. 참조