정적 분석 도구의 사용법을 이해하는 데 도움이 되는 'Taint 분석'에 대한 설명을 드리겠습니다. Taint 분석은 정적이나 동적으로 프로그램을 분석할 때 모두 사용할 수 있는 방법 중의 하나로, 프로그램의 흐름에 따라 사용자의 입력을 추적하면서 분석하는 방법입니다.
Taint 분석 시 알아두면 좋은 용어가 두 개 있는데요. 바로 'taint source'와 'sink'입니다. 사용자의 입력으로 만들어진 값을 오염(taint)된 값이라고 하고 이를 taint source라고 표현합니다. 그리고 taint source가 인자로 주어졌을 때 문제가 발생하는 함수를 sink라고 합니다. 예를 들어 자바에서는 파일을 열 수 있는 java.io.File() 메서드나 임의의 명령을 실행할 수 있는 java.lang.Runtime.exec() 메서드가 sink입니다. 동적 분석에서 Taint 분석을 사용할 때는 프로그램에 실제 입력되는 값을 taint source로 지정하고 프로그램에서 해당 입력 값을 다루는 부분부터 추적합니다. 하지만 정적 분석에서 Taint 분석을 사용할 때는 사용자의 입력을 정확히 정의하기 힘들기 때문에 taint source를 임의로 정하여 분석을 진행합니다.