간단한 실습을 통해 파이썬 스크립트 실행 프로세스를 분석해보겠습니다.
실습 환경
Ubuntu 16.04.1 LTS
python 3.5.2
실습
해당 예제를 이용하여 파이썬 빌드 매커니즘을 탐색해보도록 하겠습니다.
해당 코드는 바이트코드(중간 형식)으로 컴파일 됩니다.
스크립트가 외부 모듈을 가져오고 대상 디렉터리에 쓸 수 있다면 컴파일된 파이썬 모듈(.pyc)이 생성되지만 위의 경우 외부 모듈을 가져오지 않으므로 .pyc 파일을 만들 수 없습니다.
빌드 프로세스를 검사하기 위해 py_compile 모듈을 사용하여 .pyc 파일을 강제로 생성할 수 있습니다.
.pyc 파일에는 바이트코드가 만들어집니다. 이후 파일의 헤더를 제거하고 *언마샬링(비정렬화)하여 types.CodeType 구조로 바이너리 파일의 내용을 검사할 수 있습니다.
표시하지 않은 CodeType 객체에 더 많은 정보가 인코딩 되어 있지만 바이트 코드 바이너리의 일반적인 구조를 보여줍니다.
해당 바이트 코드는 파이썬 가상 머신 런타임에 의해 실행됩니다. 이 바이트 코드는 이진 머신 코드가 아니라, 가상 머신이 해석한 파이썬 고유의 연산 코드이며, 코드를 기계 명령어로 변환합니다. 이전에 생성한 code 객체를 dis.disassemble()함수를 이용해 역어셈블링하면 [그림 5]와 같이 표시됩니다.
필요한 빌드 또는 컴파일 단계가 없기 때문에 인터프리터 언어의 코드 실행 프로세스가 짧아집니다.
이를 통해 코드를 작성한 직후에 코드를 실행할 수 있습니다.
사람이 작성한 소스코드에 액세스해 기능별로 정확히 분류할 수 있는 특정 소프트웨어의 특성 및 의도를 쉽게 파싱할 수 있습니다.
그러나 코드에 대한 액세스 권한이 없기 때문에 프로그램에 대한 정보를 추출하기 위해 좀 더 간접적인 방법을 사용해야 합니다.
최신 코드 실행 프로세스에 대한 이해를 바탕으로, 이제는 악성 코드의 정ㅈ거 및 런타임 분석에 접근하기 위한 여러 가지 방법을 살펴볼 수 있다. 코드는 작성자에서 실행에 이르기까지 잘 정의된 경로를 거친다. 경로를 따라 어느 지점에서든 가로 채기 하면 프로그램에 대한 많은 정보를 얻을 수 있습니다.
참고
"머신 러닝을 활용한 컴퓨터 보안, 클라렌스 치오, 데이비드 프리먼, 에이콘"
"Machine Learning and Security by Clarence Chio and David Freeman(O'Reilly). Copyright 2018 Clarence Chio and Davide Freeman, 978-1491-97990-7"
'Security > AI' 카테고리의 다른 글
머신러닝을 활용한 악성코드 분석 - 악성코드 분석(정적 방법 - 구조 분석) (0) | 2022.01.27 |
---|---|
머신러닝을 활용한 악성코드 분석 - 일반적인 악성코드 공격의 흐름 (0) | 2022.01.24 |
머신러닝을 활용한 악성코드 분석 - 빌드 프로세스 (0) | 2021.11.19 |
머신러닝을 활용한 악성코드 분석 - 악성코드 (0) | 2021.11.04 |
Naive Bayes(나이브 베이즈) (0) | 2021.10.31 |