악성코드 난독화 (Malware Obfuscation)

정보보안학
한 줄 정의: 악성코드의 실제 동작은 그대로 유지하면서 코드의 형태를 변형하여 분석과 탐지를 어렵게 만드는 기법입니다.

쉽게 풀면

난독화는 같은 뜻을 가진 문장을 일부러 알아보기 힘든 은어나 암호로 바꿔 쓰는 것과 비슷합니다. 프로그램이 실제로 하는 일은 바뀌지 않지만, 코드를 읽는 사람이나 탐지 프로그램이 그 내용을 알아보기 어렵게 만드는 것이 목적입니다. 변수 이름을 의미 없는 문자로 바꾸거나, 코드를 암호화한 뒤 실행 시점에 복호화하는 방식 등이 흔히 사용됩니다. 이 때문에 같은 악성코드라도 겉모습만 계속 바뀌어 시그니처 기반 탐지를 피해가기도 합니다.

왜 중요한가

난독화는 악성코드 탐지율을 떨어뜨리는 핵심 요인이기 때문에 정보보안학에서 탐지 기법과 분석 자동화 연구의 중요한 대상이 됩니다. 정적 분석만으로는 실제 동작을 파악하기 어려워 동적 분석이나 역난독화 기법 연구와 밀접하게 연결됩니다.

논문에서는 이렇게 쓰입니다

"수집된 악성코드 샘플의 상당수가 문자열 암호화와 제어 흐름 평탄화 기법을 통한 난독화를 적용하고 있었다."

실제 악성코드 샘플에서 관찰되는 대표적인 난독화 기법들을 언급하는 문장입니다.

"본 논문에서는 난독화된 스크립트의 동적 실행 흔적을 수집하여 원본 악성 행위를 복원하는 방법을 제안한다."

난독화를 우회하여 실제 악성 행위를 분석하는 연구 방향을 설명하는 문장입니다.

조금 더 깊게 보면

대표적인 기법으로는 변수·함수명을 무의미한 문자열로 바꾸는 이름 난독화, 코드 실행 순서를 복잡하게 뒤섞는 제어 흐름 평탄화, 문자열이나 코드 블록 자체를 암호화해두었다가 실행 시점에만 복호화하는 방식이 있습니다. 이러한 기법은 흔히 패커와 함께 사용되어 정적 분석 도구가 코드의 실제 내용을 읽어내기 더욱 어렵게 만듭니다.

주의할 점

난독화 자체는 정상 소프트웨어에서도 지적재산권 보호 목적으로 널리 쓰이는 기법이므로, 난독화가 적용되었다는 사실만으로 곧바로 악성코드라고 단정할 수는 없습니다.

관련 용어