악성코드 난독화 (Malware Obfuscation)
쉽게 풀면
난독화는 같은 뜻을 가진 문장을 일부러 알아보기 힘든 은어나 암호로 바꿔 쓰는 것과 비슷합니다. 프로그램이 실제로 하는 일은 바뀌지 않지만, 코드를 읽는 사람이나 탐지 프로그램이 그 내용을 알아보기 어렵게 만드는 것이 목적입니다. 변수 이름을 의미 없는 문자로 바꾸거나, 코드를 암호화한 뒤 실행 시점에 복호화하는 방식 등이 흔히 사용됩니다. 이 때문에 같은 악성코드라도 겉모습만 계속 바뀌어 시그니처 기반 탐지를 피해가기도 합니다.
왜 중요한가
난독화는 악성코드 탐지율을 떨어뜨리는 핵심 요인이기 때문에 정보보안학에서 탐지 기법과 분석 자동화 연구의 중요한 대상이 됩니다. 정적 분석만으로는 실제 동작을 파악하기 어려워 동적 분석이나 역난독화 기법 연구와 밀접하게 연결됩니다.
논문에서는 이렇게 쓰입니다
실제 악성코드 샘플에서 관찰되는 대표적인 난독화 기법들을 언급하는 문장입니다.
난독화를 우회하여 실제 악성 행위를 분석하는 연구 방향을 설명하는 문장입니다.
조금 더 깊게 보면
대표적인 기법으로는 변수·함수명을 무의미한 문자열로 바꾸는 이름 난독화, 코드 실행 순서를 복잡하게 뒤섞는 제어 흐름 평탄화, 문자열이나 코드 블록 자체를 암호화해두었다가 실행 시점에만 복호화하는 방식이 있습니다. 이러한 기법은 흔히 패커와 함께 사용되어 정적 분석 도구가 코드의 실제 내용을 읽어내기 더욱 어렵게 만듭니다. 악성코드 난독화는 코드 자체의 논리를 바꾸지 않으면서 변수명을 무의미한 문자열로 바꾸거나, 불필요한 분기문을 삽입하거나, 코드를 실행 직전에 암호화된 상태로 풀어내는 패킹 기법을 결합해 시그니처 기반 탐지를 우회하려는 목적으로 사용됩니다.
주의할 점
난독화 자체는 정상 소프트웨어에서도 지적재산권 보호 목적으로 널리 쓰이는 기법이므로, 난독화가 적용되었다는 사실만으로 곧바로 악성코드라고 단정할 수는 없습니다. 난독화된 코드라고 해서 반드시 악성인 것은 아니며, 정상 소프트웨어도 지적재산 보호를 위해 난독화를 적용하는 경우가 많아 난독화 자체를 악성 여부의 판단 기준으로 삼을 수는 없습니다. 이 때문에 최신 탐지 체계는 시그니처 매칭 대신 실제 실행 시 행위를 관찰하는 행위 기반 탐지 방식을 함께 사용해 난독화 우회를 시도합니다.