정보보호/용어

Taint Analysis (오염 분석)

규글 2024. 9. 22. 16:31

읽고 있는 논문

: BoKASAN: Binary-only Kernel Address Sanitizer for Effective Kernel Fuzzing

 

이하 내용을 참고한 블로그[각주:1]

 

Taint Analysis (오염 분석)

: 메모리에 'taint' 값을 삽입하고, 데이터를 추적하여 프로그램의 어떤 곳에서 영향을 미치는지 관찰하는 분석 방식

: 정적 분석과 동적 분석으로 구분함

 

Static Taint Analysis (정적 분석)

: source code를 parsing 해서 control flow diagram을 그려 모든 분기를 확인하는 분석 방식.

: 동적 분석보다는 code coverage가 높으나, 런타임 정보에 접근할 수 없어서 레지스터나 메모리 값을 체크할 수 없기 때문에 동적 분석에 비해서는 정확하지 않음.

: 소스 코드가 제공되어야 분석이 가능.

 

Dynamic Taint Analysis (동적 분석)

: 프로그램 내의 특정 상태 어떤 부분이 다른 프로그램 상태의 부분에 영향을 미치는지 확인할 수 있는 분석 기법

: 데이터의 흐름을 추적하기 위해서는 해당 데이터가 메모리나 레지스터 상에서 처리되도록 하는 모든 명령어를 계측하므로, 성능 저하를 유발함.

: taint value를 오염 값이라 생각하고, 이는 공격자가 악용할 수 있는 것을 의미하기도 함.

: 네트워크를 통해 수신한 데이터를 오염시킨 후, 그 흐름을 추적하다가 PC(Procgram Counter)가 변조되는 것을 감지할 수 있음

: Binary 분석 관점에서 동적 분석은 계측 플랫폼의 최상단에 구현됨.

: Data Flow Tracking, 혹은 (Dynamic) Taint Tracking 이라고도 불림.

 

Code Coverage

(우리말 위키[각주:2]) : 소프트웨어의 테스트를 논할 때 얼마나 테스트가 충분한가를 나타내는 지표 중 하나

: 글자 그대로 코드가 얼마나 커버되었는가. 소프트웨어 테스트를 진행했을 때 코드 자체가 얼마나 실행되었는가.

커버리지를 측정하는 법은 사람이 로그를 찍어가거나 디버거를 이용하여 볼수는 있으나 매우 힘든 과정.

: 시중에는 많은 코드커버리지 측정 도구가 나와 있으며, 대표적인 도구로 DT10, LDRA, VectorCAST, CodeScroll Controller Tester, QualityScroll Cover 라는 도구가 있음.

 

코드의 구조를 이루는 것은 크게 구문(Statement), 조건(Condition), 결정(Decision)

이러한 구조를 얼마나 커버했느냐에 따라 코드커버리지의 측정기준은 나뉨.

 

구문(Statement) 커버리지

: 일반적으로 많이 사용. 실행 코드 라인이 한 번 이상 실행되면 충족함.

 

조건(Condition) 커버리지

: 각 내부 조건이 참 혹은 거짓을 가지면 충족함.

 

결정(Decision) 커버리지

: 각 분기의 내부 조건자체가 아닌 이러한 조건으로 인해 전체 결과가 참 혹은 거짓이면 충족함.

 

MC/DC 커버리지

: 조건과 결정을 복합적으로 고려하는 방식.

 

(영어 위키[각주:3]) : test suite를 실행했을 때 프로그램의 소스 코드가 실행되는 정도에 대한 percentage measure

: 'test coverage'라고도 함

: code coverage가 높다는 것은 test 동안 실생되는 소스 코드가 더 많다는 것이고, 이는 code coverage가 낮은 프로그램과 비교했을 때 발견되지 않은 버그를 포함할 기회가 더 적다는 것을 의미함.

: systematic한 소프트웨어 테스팅을 위해 고안된 최초의 method 중에 하나로, 1963년 Communicatoins of the ACM 소속 의 Miller와 Maloney에 의해 제안되었음.

 

Function(Subroutine) Coverage

: 각 함수가 호출되었는가?

 

Statement Coverage

: 프로그램의 각 구문이 실행되었는가?

 

Edge Coverage

: Control - Flow Diagram의 각각의 edge가 실행되었는가?

 

cf) Branch Coverage : if 혹은 case statement와 같은 제어 구조에서 각 branch가 실행되었는가?

 

Condition Coverage

: 각 Boolean sub-expression이 true나 false로 평가되었는가?

: 'Predicate Coverage'라고도 함

 

 

Reference