데이터 흐름 기반 슬라이싱

데이터 흐름 기반 슬라이싱
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

흐름 무관 분석을 이용해 지정된 데이터 흐름 경로와 무관한 코드를 빠르게 제거하고, 결과를 검증 가능한 인증서와 함께 제공하는 DSlicer를 소개한다. 10,600개의 안드로이드 앱에 적용해 평균 36%의 메서드 감소를 달성하였다.

상세 분석

본 논문은 기존 정적 분석이 전체 프로그램을 대상으로 수행될 때 발생하는 불필요한 탐색 비용을 최소화하기 위해, 데이터 흐름 경로만을 보존하는 흐름 무관(s flow‑insensitive) 슬라이싱 기법을 제안한다. 핵심 아이디어는 프로그램을 할당 그래프(assignment graph) 로 평탄화하고, 각 변수·필드·메서드 호출을 그래프의 노드와 간선으로 매핑하는 것이다. 이때 객체 필드는 클래스 기반으로 단일 노드에 집약되어, 모든 인스턴스에 대한 별칭(alias)을 보수적으로 다루면서도 그래프 크기를 크게 줄인다.

그래프 구축 단계에서는 Jimple‑유사 3‑주소 형태의 중간 표현을 사용해, 상수 할당, 변수‑변수 복사, 단항·이항 연산, 배열·필드 접근, 메서드 호출 및 반환을 모두 일관된 변환 규칙(Table 1)으로 표현한다. 특히 메서드 호출은 실제 수신 객체 타입을 클래스 계층 기반 추정으로 오버-approximation 하여, 동적 디스패치를 안전하게 모델링한다.

슬라이스 계산은 ComputeSlice 알고리즘으로 수행된다. 먼저 모든 소스 노드에 ‘+’ 마크를 부여하고 전방 전파하여 소스에서 도달 가능한 모든 노드를 표시한다. 이어서 모든 싱크 노드에 ‘‑’ 마크를 부여하고, 역방향 전파를 수행하되 전방에서 이미 ‘+’ 로 표시된 노드만을 대상으로 한다. 최종적으로 ‘+’와 ‘‑’가 동시에 존재하는 노드가 데이터 흐름 경로에 포함된 변수·필드이며, 이들 변수를 참조하는 메서드가 슬라이스 결과에 남는다.

이 과정은 보수적이며 전체 메서드 수준으로 결과를 반환한다. 즉, 하나라도 관련 변수를 사용하는 메서드는 완전하게 보존된다. 또한, 분석 결과에 대한 인증서를 두 부분으로 제공한다. 첫 번째는 할당 그래프 자체가 변환 규칙을 충족함을 증명하는 번역 인증서, 두 번째는 각 노드에 부여된 마크가 알고리즘 규칙에 따라 일관된지를 검증하는 분석 인증서이다. 이러한 인증서는 외부 검증 도구가 독립적으로 수행 가능하도록 설계되어, 결과의 신뢰성을 크게 향상시킨다.

실험에서는 Androguard을 프론트엔드로 사용해 APK를 파싱하고, FloW‑Droid에서 제공한 100여 개의 소스·싱크 정의를 슬라이싱 기준으로 채택하였다. 10,600개의 실제 안드로이드 앱에 적용한 결과, 평균 5초 내에 분석이 완료되었으며, 메서드 수가 평균 3,914개인 앱에서도 36%(≈1,400개)의 메서드를 안전하게 제거할 수 있었다. 분석 시간은 메서드 수에 거의 선형적으로 증가했으며, 가장 큰 앱(≈49,000 메서드)에서도 1,682초 이하로 처리되었다.

본 연구는 데이터 흐름 보존이라는 제한된 슬라이스 기준을 통해, 기존의 정밀하지만 비용이 큰 데이터 흐름 분석 앞단에 경량 전처리 단계로 활용될 수 있음을 보여준다. 특히, 동적 디스패치와 필드 별칭을 보수적으로 다루면서도 그래프 크기를 크게 줄이는 설계는 객체 지향 언어, 특히 안드로이드와 같은 대규모 모바일 앱에 매우 적합하다. 향후 연구에서는 더 세분화된 변수 수준 슬라이스와, 다른 정적 분석(예: 취약점 탐지)과의 연계 효과를 평가할 여지가 있다.


댓글 및 학술 토론

Loading comments...

의견 남기기