← 최신 논문
🤖 machine learning

Fool Me If You Can: On the Robustness of Binary Code Similarity Detection Models against Semantics-preserving Transformations

이 논문은 이진 코드 유사성 탐지 (BCSD) 모델이 의미 보존 변환에 얼마나 취약한지 평가하기 위해 'asmFooler' 시스템을 제안하고, 전처리 및 아키텍처 등 파이프라인 요소가 모델의 강건성에 결정적 영향을 미치며 소량의 변환으로도 모델 판단을 교란할 수 있음을 규명했습니다.

원저자: Jiyong Uhm, Minseok Kim, Michalis Polychronakis, Hyungjoon Koo

게시일 2026-02-16
📖 4 분 읽기☕ 가벼운 읽기

원저자: Jiyong Uhm, Minseok Kim, Michalis Polychronakis, Hyungjoon Koo

원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

이 논문은 **"컴퓨터 프로그램의 '정체성'을 확인하는 AI 가 얼마나 속기 쉬운가?"**에 대한 이야기입니다.

마치 지문이나 얼굴 인식 시스템이 있듯이, 컴퓨터 보안 분야에서는 두 개의 프로그램 코드가 "같은 것"인지 "다른 것"인지 판별하는 AI(이론) 가 많이 쓰입니다. 이를 '이진 코드 유사성 탐지 (BCSD)'라고 합니다. 하지만 이 논문은 이 AI 들이 코드의 외형만 살짝 바꾸고 속은 그대로인 '변장'을 당하면 얼마나 쉽게 속아넘어가는지 실험으로 증명했습니다.

이 복잡한 내용을 일상적인 비유로 쉽게 설명해 드릴게요.


🕵️‍♂️ 1. 배경: "코드의 지문"을 찾는 AI

컴퓨터 프로그램은 소스 코드 (사람이 읽는 언어) 가 없이 실행 파일 (기계어) 로만 남는 경우가 많습니다. 보안 전문가들은 이 실행 파일을 분석해서 "이 프로그램이 해킹 도구인가?" 혹은 "이 두 프로그램이 같은 개발자가 만든 것일까?"를 판단해야 합니다.

최근에는 **딥러닝 (AI)**이 이 일을 대신합니다. AI 는 코드의 복잡한 패턴을 학습해서 "이 코드는 A 와 B 가 거의 똑같아!"라고 말해줍니다. 마치 지문 인식기가 두 손가락의 지문을 비교하는 것과 비슷합니다.

🎭 2. 문제: "변장"을 한 악당들

하지만 악당들은 이 AI 를 속일 수 있습니다. 코드의 **기능 (의미)**은 전혀 바꾸지 않으면서, **모양 (문법)**만 살짝 바꾸는 기술들이 있기 때문입니다.

  • 비유: 누군가 당신을 알아보려고 하는 경비원 (AI) 이 있다고 칩시다.
    • 당신은 모자를 쓰고, 안경을 끼고, 옷을 갈아입고 경비원에게 다가갑니다.
    • 하지만 **당신이라는 사람 (기능)**은 그대로입니다.
    • 경비원이 "아, 이 사람은 저 사람이 아니야!"라고 잘못 판단하면 (거짓 부인), 악당은 감옥을 피할 수 있습니다.
    • 반대로, 전혀 다른 사람이 당신과 똑같은 옷을 입고 와서 "저는 당신입니다!"라고 속여, 경비원이 "아, 이 사람도 당신 맞네!"라고 잘못 판단하면 (거짓 인정), 악당은 보안 구역에 들어갈 수 있습니다.

이 논문은 바로 이 **"변장 (Semantics-preserving Transformations)"**을 통해 AI 를 얼마나 쉽게 속일 수 있는지 실험한 것입니다.

🛠️ 3. 실험 도구: 'asmFooler'라는 장난감 상자

저자들은 asmFooler라는 시스템을 만들었습니다. 이 시스템은 620 개의 기본 프로그램에서 9,500 개가 넘는 '변장 버전'을 만들어냅니다.

어떻게 변장할까요?

  1. 코드 뒤섞기 (Diversification): 같은 일을 하는 명령어들을 순서만 바꾸거나, 레지스터 (일시 저장소) 이름만 바꿔서 코드를 뒤죽박죽으로 만듭니다. (예: "사과를 먹어"를 "먹어, 사과"로 바꾸는 것)
  2. 쓰레기 코드 삽입 (Obfuscation): 실행되지 않는 무의미한 명령어들 (Junk Code) 을 코드의 구석구석에 숨깁니다. (예: 대화할 때 "아, 저기... 아, 저기..." 같은 불필요한 말을 끼워 넣는 것)
  3. 의미 없는 NOP (Semantic NOP): "아무 일도 하지 않는" 명령어들을 끼워 넣되, 그 효과가 곧바로 상쇄되도록 설계합니다. (예: "손을 들어라" -> "손을 내리라" -> "손을 들어라" -> "손을 내리라"를 반복해서 결국 손은 원래대로)

📉 4. 실험 결과: AI 들은 얼마나 무력했나?

저자들은 6 가지 최신 AI 모델을 이 변장된 코드들에 노출시켰습니다. 결과는 충격적이었습니다.

  • 결국 속아넘어갔다: 대부분의 AI 모델이 변장된 코드를 보고 "이건 원래 코드와 다르다!"라고 잘못 판단하거나 (거짓 부인), "이건 원래 코드와 똑같다!"라고 잘못 판단했습니다 (거짓 인정).
  • AI 의 성향에 따라 다름:
    • 지문만 보는 AI (순서 중심): 코드의 순서가 조금만 바뀌어도 (예: 명령어 순서 뒤바꾸기) 완전히 망가졌습니다.
    • 구조를 보는 AI (그래프 중심): 코드의 전체적인 흐름 (Control Flow) 을 보는 AI 는 순서 바꾸기에는 강했지만, 흐름을 인위적으로 뒤틀면 (예: 제어 흐름 평탄화) 속아넘어갔습니다.
  • 최소한의 노력으로 최대의 효과: 악당들은 코드를 아주 조금만 변장해도 (평균 14 개의 명령어 추가) AI 를 100% 속일 수 있었습니다. 마치 얼굴에 작은 스티커 하나만 붙여도 얼굴 인식기가 "아, 이 사람은 누구지?"라고 오인하는 것과 같습니다.

🧠 5. 왜 이런 일이 일어날까? (AI 의 약점)

논문의 핵심 통찰은 **"AI 가 코드를 어떻게 이해하느냐에 따라 약점이 다르다"**는 것입니다.

  • 비유: 어떤 AI 는 코드를 문장으로 봅니다. "주어 - 서술어" 순서가 바뀌면 문장이 달라진다고 생각합니다.
  • 비유: 어떤 AI 는 코드를 지도로 봅니다. 길의 연결 구조가 바뀌면 다른 곳이라고 생각합니다.
  • 비유: 어떤 AI 는 코드의 **역사 (실행 경로)**를 봅니다.

악당들은 AI 가 어떤 '안경'을 쓰고 있는지 파악하고, 그 안경에 맞는 변장만 하면 됩니다. 예를 들어, 순서만 중요하게 생각하는 AI 에게는 순서를 뒤섞고, 구조만 중요하게 생각하는 AI 에게는 구조를 뒤흔들면 됩니다.

💡 6. 결론: 우리는 무엇을 배웠나?

이 논문은 우리에게 중요한 메시지를 줍니다.

  1. AI 는 완벽하지 않다: 보안에 AI 를 쓴다고 해서 안심하면 안 됩니다. 악당들은 코드의 '의미'는 유지하면서 '모양'만 바꿔 AI 를 속일 수 있습니다.
  2. AI 설계가 중요하다: AI 가 코드를 어떻게 분석하느냐 (순서, 구조, 실행 흐름 등) 에 따라 견고함이 결정됩니다. 앞으로는 이 모든 것을 종합적으로 보는 AI 가 필요합니다.
  3. 경계는 필요하다: "코드가 조금 변형되었다고 해서 무조건 다른 프로그램이라고 생각하면 안 된다"는 교훈을 줍니다.

한 줄 요약:

"컴퓨터 코드의 '영혼'은 그대로인데 '옷'만 바꿔 입으면, 최신 AI 보안 시스템도 그 사람을 알아보지 못하고 속아넘어갑니다. 우리는 AI 가 더 똑똑해지도록, 혹은 AI 를 속이지 못하도록 방어책을 더 잘 마련해야 합니다."

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →