Skip to main content

Command Palette

Search for a command to run...

Android 악성 앱, 왜 여전히 뚫릴까? Louvain 그래프 탐지법이 그 해답일지도!

Updated

“바이러스는 진화한다. 그럼 탐지법도 진화해야 하지 않을까?”

악성 앱은 더 똑똑해졌습니다. 단순히 특정 API를 호출하는지 감지하는 방식은 더 이상 통하지 않죠. API가 어떻게 엮이는지, 함께 등장할 때 어떤 ‘행위 패턴’을 만드는지까지 보는 시대입니다. 그리고 바로 여기서, “동시 출현 그래프”“커뮤니티 탐지”라는 키워드가 등장합니다.


개념 드리프트, 악성 탐지의 맹점

악성 앱 탐지 모델이 시간이 지나면 무력해지는 현상, 알고 계셨나요? 이걸 Concept Drift, 즉 “개념 드리프트” 라고 부릅니다. 예를 들어 2014년에 만든 모델이 2023년도 앱에 무력하다면 그 이유는 무엇일까요? 바로 개념 드리프트 때문입니다. 개념 드리프트가 발생하는 이유는 악성 코드도 점점 진화하며, 시대를 타니까 입니다.

기존에는 이 문제를 재학습으로 해결하는 경우가 많았습니다. 하지만 매번 새 데이터를 수집하고, 다시 학습하는건? 역시 시간과 돈이 많이 든다는 문제가 있습니다.


API는 혼자 행동하지 않는다: 동시 출현 그래프란?

저는 그래서 이걸 해결하기 위해 다음과 같은 새로운 접근을 제안했습니다. API 하나만 보는게 아니라, 함께 등장하는 API의 관계를 본다면 어떨까?

이걸 “동시 출현 그래프”로 모델링하면, 다음과 같이 보입니다.

“이 앱은 sendSMS와 getLocation을 자주 함께 호출하네. 위험할 수도 있어!”

이러한 동시 출현 관계망을 만든 뒤, Louvain 알고리즘을 사용해서 비슷한 API끼리 커뮤니티로 묶습니다.


기술 소개

그래서 저는 이 알고리즘을 이용해서 자동으로 악성 앱을 탐지하는 인공지능 모델을 만들었습니다.

이 모델은 다음과 같이 작동합니다.

  1. API 간 동시 출현을 그래프로 모델링

  2. Louvain 커뮤니티 탐지로 의미 있는 그룹화

  3. Node2Vec 임베딩으로 의미 기반 벡터화

  4. 각 커뮤니티별로 Random Forest 분류기를 개별 학습

  5. 테스트 단계에서는, 개념 드리프트 발생 시 threshold를 자동 조정

이 결과, 재학습 없이도 6년치의 악성앱을 매년 80% 넘게 탐지할 수 있었습니다.

아래는 제가 개발한 모델의 구조도입니다.


왜 이 방법이 특별할까?

  1. 시간에 강하다! : 제 모델은 2014년부터 2017년까지의 데이터로만 학습하고, 2018년부터 현재까지 재학습 없이 탐지율이 높습니다.

  2. 설명 가능한 인공지능: 이 앱은 어떤 커뮤니티에서 문제가 생겼을까? 를 추적할 수 있습니다.

  3. False Positive 최소화: 정상 앱에 대한 불필요한 차단이 적습니다.

  4. 개념 변화 인지 임계값 보정: 데이터 분포 변화에 자동으로 적응합니다.


한계는 없을까?

  • 일부 앱은 커뮤니티에 속하지 못해 탐지가 제외될 수 있습니다.

  • 커뮤니티 크기 불균형에 따른 학습 성능 편차가 존재합니다.

  • 동적 분석을 포함하지 않아 실행 중 변화 탐지는 불가능합니다


마무리하며

이 글에서 소개한 탐지 기법은 “시간에 굴복하지 않는 악성 앱 탐지기” 라고 부를 수 있습니다. 단순히 성능이 좋은게 아니라, “지속적으로 성능이 좋은 모델”이 진짜 의미 있는 모델 아닐까요?


저는 보안에 인공지능을 활용해서 실제 세계 문제를 해결하는 것을 좋아합니다.

다음 번에는 다른 신선한 주제로 얘기해보도록 합시다!

읽어주셔서 감사하고, 건강한 토론은 언제나 환영입니다.

More from this blog

[WriteUp] / [CryptoHack] Resisting Bruteforce

해석 블록 암호가 안전하려면, 공격자가 AES의 출력과 무작위 비트 배열을 구분할 수 없어야 한다. 또한, 키를 무작위로 전부 시도하는(브루트포싱) 것보다 더 효율적인 복호화 방법이 있어서는 안 된다. 그래서 이론적으로라도 브루트포싱보다 적은 연산으로 복호화가 가능하다면, 그 암호는 '깨졌다고(broken)' 간주된다. 128비트 키를 브루트포싱하는 건 얼마나 어려울까? 누군가 계산했는데, 비트코인 전체 채굴 연산력을 동원해도 우주의 나이보다 ...

Jul 28, 2025

열심히 만든 리버싱 문제를 날먹하는 방법

열심히 만든 리버싱 문제를 날먹으로부터 지키는 방법 이 글을 읽기 전에 위의 드림핵 커뮤니티에 올라온 글을 보면 이해하기 수월하다. 서론 리버싱 문제는 출제자가 의도한 대로 정석적인 방법으로 역연산을 하여 플래그를 구할 수도 있지만, 편법을 사용하여 날먹하는 것이 가능하다. 편법에는 여러가지 방법이 있지만 위 드림핵 커뮤니티 글을 읽고 아이디어를 얻어 리버싱 문제를 해결했기 때문에 그 방법을 소개하고자 한다. 문제 풀이 해결한 문제는 Rev L...

Jul 28, 2025
A

Aegis

5 posts