GitHub AI로 안드로이드 취약점 24건 발견

GitHub 시큐리티랩(Security Lab) 연구원 케빈 스터빙스(Kevin Stubbings)는 9월 28일, 자체 오픈소스 AI 보안 에이전트로 안드로이드 앱을 감사해 취약점 24건을 찾아내고 보고한 과정을 소개했다. 사용된 도구는 seclab-taskflow-agent로, 핵심은 YAML로 작성된 일련의 '태스크플로'다. 이 태스크플로가 대형언어모델을 단계별로 이끌어 코드를 읽고, 진입점을 분류하고, 문제를 찾고, 검증 코드를 작성하게 한다.

이 태스크플로는 이전까지 범용 코드 감사에 쓰였는데, 이번에는 모바일용으로 손을 봐서 gather_mobile_entry_point_info.yaml과 classify_application_local.yaml이라는 두 파일을 새로 추가했다. 각각 앱의 진입점을 정리하고 취약점을 분류하는 역할을 맡는다.

실행 방법

글에 따르면 사용자는 GitHub Codespaces에서 감사 스크립트를 실행하고, 환경이 초기화되는 몇 분을 기다린 뒤 에이전트를 돌리기만 하면 된다. 중간 규모 저장소 기준으로 대략 한두 시간이 걸린다. 결과는 SQLite 데이터베이스에 기록되며, audit_results 테이블을 열어 has_vulnerability 항목이 체크된 행만 걸러내면 에이전트가 문제로 판단한 지점을 확인할 수 있다.

태스크플로가 다루는 취약점 유형은 안드로이드의 고질적인 문제들에 집중돼 있다. Intent 관련 컨퓨즈드 디퍼티(confused deputy)와 안전하지 않은 브로드캐스트, WebView 내 크로스앱 스크립팅, 웹 콘텐츠에 노출된 JavaScript 브리지, 경로 순회(path traversal), 딥링크 파싱 로직 오류, 그리고 쿠키·로그인 토큰 유출이다. 글에 따르면 분류 목록은 12개 CWE 카테고리에 걸쳐 있다.

자세히 다룬 두 가지 사례

OsmAnd는 다운로드 수 1000만 건이 넘는 오픈소스 지도·내비게이션 앱이다. 에이전트는 설정 가져오기 기능에서 문제 3건을 찾아냈는데, 그중 하나는 같은 기기에 설치된 악성 앱이 아무 권한도 요청하지 않고 Intent 부가 파라미터를 통해 설정을 조용히 가져와, 사용자의 위치와 이동 경로를 추적할 수 있게 하는 것이었다.

위키백과 안드로이드 앱에서는 딥링크 파싱 로직에서 취약점이 발견됐다. 공격자가 악성 링크를 만들어 사용자를 위조 페이지로 유도한 뒤, 이를 통해 쿠키를 탈취하고 최종적으로는 장기간 유효한 로그인 토큰으로 계정을 탈취할 수 있다.

스터빙스는 해당 언어의 소스코드를 전혀 제공하지 않았는데도 모델이 다양한 언어의 보안 관련 API 동작을 이 정도로 정확히 이해하고 있다는 사실에 팀이 놀랐다고 적었다. 에이전트가 작성한 개념 증명(PoC) 코드도 아주 약간의 수정만으로 실제로 작동했다고 한다.

"LLMs are good at finding vulnerabilities but struggle at estimating severity."

대형언어모델은 취약점을 찾는 데는 뛰어나지만 심각도를 가늠하는 데는 서툴다.

하지 못하는 것들

글은 한계에 대해서도 솔직하게 밝혔다. 프롬프트에서 명시적으로 하지 말라고 지시해도 모델은 저위험 문제를 곧잘 보고한다. 완화 조치가 돼 있는 취약점의 경우 실제 위험도를 제대로 판단하지 못한다. 복잡한 데이터 흐름의 우선순위 문제는 식별해내지 못한다. 믿을 만한 PoC를 얻으려면 여러 번 돌려야 하는 경우가 많고, 디버거를 붙이거나 프롬프트를 추가해야 할 때도 있다. 결론은 모든 발견 사항을 모바일 보안에 정통한 연구원이 직접 검토해야 한다는 것이다.

비용 면에서는 실행에 GitHub Copilot 라이선스가 필요하고, 프리미엄 모델 요청을 소모한다. 글은 대형 저장소일수록 툴 호출이 많이 발생해 토큰 소모가 크다고 경고했지만, 구체적으로 어떤 모델을 썼는지는 밝히지 않았다.

중국 개발자들에게는

태스크플로와 스크립트는 모두 GitHub에 오픈소스로 공개돼 있어, 중국 팀들도 손봐서 자사 안드로이드 앱 감사에 쓸 수 있다. 걸림돌은 Copilot 라이선스와 해외 모델 의존이다. 태스크플로 자체는 YAML로 작성된 프롬프트와 절차 구성일 뿐이라 국산 모델로 대체하는 것도 이론적으로는 가능하지만, 실제 성능을 비교한 공개 데이터는 아직 없다.

안드로이드 생태계의 파편화 때문에 이런 도구는 중국 시장에서 쓸모가 더 크다. 각 제조사 앱스토어, 미니프로그램 컨테이너, 슈퍼앱에 내장된 WebView와 JavaScript 브리지는 이 체크리스트가 다루는 취약점 범위에 정확히 들어맞는다. GitHub는 앞으로 태스크플로를 웹·데스크톱 앱으로도 확장하고 커뮤니티 기여를 받을 계획이라고 밝혔다.

참고 출처: GitHub 공식 블로그, CocoLoop, GitHub 시큐리티랩 오픈소스 저장소. 취약점 건수, OsmAnd 다운로드 수, 회당 감사 소요 시간은 모두 GitHub 블로그 기재 내용을 기준으로 한다.