[보안] Taint Analysis란
Taint Analysis란?
- 정의
- 프로그램에서 사용자 입력값으로 인해 어떤 레지스터와 메모리 영역이 제어 가능한지 확인하는 기법
- 특징
- 메모리 성능 확인, 보안 테스트 등에 사용
- 프로그램 소스 코드 없이 분석 가능
- 동작 방식
- Dynamic analysis
- 환경 및 시스템 호출과 같은 모든 사용자 입력을 수정해야 함
- 이를 위해 DBI(Dynamic Binary Instrumentation framework) 필요
- 이를 이용해 각 명령어의 전후에 핸들러를 추가하며 핸들러가 호출되면 명령어, 메모리에 대한 모든 정보를 얻을 수 있음
- 구문을 IR로 변경 후 해석해야 함
- Valgrind라는 IR을 사용하는 계측 프레임워크가 있음
- 환경 및 시스템 호출과 같은 모든 사용자 입력을 수정해야 함
- Static analysis
- 코드를 파싱하여 제어 흐름 CFG로 모든 분기들을 확인
- 동적 분석보다 더 많은 코드 범위를 제공한다는 장점이 있음
- 그러나 레지스터와 메모리 값을 검색할 수 없기 때문에 동적 분석보다 결과의 신뢰도가 낮음
- Dynamic analysis
DBI(Dynamic Binary Instrumentation)
- 개념
- 런타임에 실행 코드를 삽입하여 바이너리 응용 프로그램의 동작을 분석하는 방법
- 장점
- 클라이언트 프로그램을 준비할 필요 없으므로 사용이 편리
- 모든 클라이언트 코드를 자연스럽게 다룸
- 코드와 데이터가 섞이거나 다른 모듈을 사용하면 정적으로 모든 코드를 계측하는 것이 어려울 수 있으며 클라이언트가 동적으로 생성된 코드를 사용하면 불가능함
- 따라서 모든 코드를 계측할 수 있는 기능은 라이브러리를 정확하고 완전하게 처리하는 데 중요함
- 단점
- 런타임시 계측 비용 발생
- 런타임에 실행 코드를 다시 작성하는 것이 어려움
- 그럼에도, DBI 프레임워크에 의해 극복되었으며 이는 런타임 오버 헤드를 최소화하기 위해 최적화 됨
- 도구
- Valgrind
- DynamoRIO
- Dyninst
- PIN
IR(Interediate Representation)
- IR은 소스 코드를 표현하기 위해 컴파일러 또는 가상 시스템에서 내부적으로 사용하는 데이터 구조나 코드
- 최적화와 번역 등 추가 처리를 위해 도움이 되도록 설계됨
- 특정 소스, 대상 언어와 무관하게 소스 코드를 나타낼 수 있음
- 여러 가지 형태가 있음
- 메모리 내 데이터 구조
- 프로그램이 읽을 수 있는 특별한 튜플 또는 스택 기반 코드
Intermediate Language
- 컴퓨터 프로그램의 분석을 돕기 위해 설계된 추상적 기계 언어
- 일반적인 기계어와는 다름
- 각 명령은 하나의 기본 동작을 나타냄
- 제어 흐름 정보는 명령 집합에 포함되지 않을 수 있음
- 사용 가능한 프로세서 레지스터 수는 크기가 크거나 무제한일 수 있음
- 일반적인 형식은 Tree-Address Code 를 따름
Tree-address code (TAC)
- 컴파일러에서 중간언어로 사용
- 피연산자는 구체적은 메모리 주소나 프로세서 레지스터가 아니라 레지스터 할당 중 실제 주소로 변환될 수 있는 기호적 주소를 의미
- TAC는 향상된 코드 변환을 위해 컴파일러를 최적하는 데 사용되는 중간 코드
- 각 TAC 명령어는 최대 세 개의 피연산자를 가지며 일반적으로 대입 연산자와 이진 연산자를 조합함
Leave a comment