정적분석과 동적분석, 정의와 차이

안녕하세요, 보안클라우드입니다.

포스트할 글을 고민하다가 매번 방문하는 고객분들께서 많이 물어보시는 부분이 생각나서, 이번에는 '정적분석'과 '동적분석'에 대해 자세히 적어볼까 합니다.

일단 다루고자 하는 두 개의 개념, 동적분석(Dynamic Application Security Testing)과 정적분석(Static Application Security Testing)은  어플리케이션을 대상으로 하며, 어떠한 취약점이 존재하고 이를 대처하기 위한 기본적인 근거자료를 수집하는 분석 방법의 종류입니다. 다만 두 개의 분석방법이 위와 같은 목적의 달성을 위해 어플리케이션에 접근하는 방법에서 차이를 보이고 있으며, 어떠한 분석방법을 선정하는 가에 따라 그 산출 결과와 대처하는 방법 또한 다소 달라지게 되므로, 선택에 앞서 두 개념 사이에 어떠한 차이가 있는가를 정확하게 이해하는 것은 보안상 아주 중요하다고 할 수 있습니다.
이에 대해서 "IBM Knowledge Center"가 쉽게 정의한 차이는 아래와 같습니다.

 

Dynamic Analysis Security Testing (DAST) tests a running web application by probing it in ways similar to what a hacker would use. Static Analysis Security Testing (SAST) examines the source code of an application for potential vulnerabilities

의역하여 해석하면, "동적분석(DAST)"은 공격자가 사용하는 방식으로 접근하여 웹어플리케이션의 취약점을 분석하고, "정적분석(SAST)"는 소스코드를 대상으로 그 안에 내재된 잠재적인 취약점을 분석한다고 정의하고 있습니다.

위 정의는 동적분석과 정적분석의 차이를 간단히 잘 보여주고 있는데, 한마디로 "동적분석"은 실제 공격자가 어플리케이션을 공격하는 환경을 인위적으로 조성하여 실제 공격이 통하는지의 여부를 발견하는 분석방법입니다. 이러한 접근방식 때문에 동적분석은 '웹해킹분석' 혹은 '모의해킹분석'으로 불리기도 하며, 실제 운영중인 어플리케이션(테스트 운영포함)을 대상으로 가상 공격이 이루어지기 때문에, 실제 공격자가 공격했을 때의 예상되는 취약점의 종류들과 항목별 대처방안들을 좀더 현실적으로 미리 대비해둘 수 있다는 이점이 있습니다.

반면 "정적분석"은 동적분석처럼 운영중인 어플리케이션을 대상으로 하는 것이 아닌 "소스코드"를 대상으로 접근하고 있기 때문에, 굳이 완성된 프로그램이 아니더라도 초기 개발단계에서부터 적용이 가능한 이점이 있고, 동적분석에서 발견되지 못하는 프로그램 본연의 취약점들, 심지어 코드의 질적인 부분까지 조기에 발견하고 처리할 수 있다는 장점이 있습니다. 한마디로 개발자분들이 개발하면서 형상관리와 함께 자신이 코딩한 소스가 잘 짜져있는지 실시간으로 취약점 분석이 가능하다는 것이죠.

정리해보면 동적분석은 [외부에서 내부로] 접근하는 방식이며, 정적분석은 [내부에서 외부로] 접근한다고 볼 수 있겠네요. 두 개의 분석방법이 같은 목적을 갖고 있으나, 이를 달성하기 위한 접근대상과 방법이 다르다는 것은 사실 결과적으로 볼 때도 큰 의미가 있습니다.

일반적인 네트워크 구성도

"동적분석"이 만약 위 그림 테스터 위치에서 이뤄진다면 결과는 어떨까요? 물론 테스트하는 위치에 따라 다소 차이는 있을 수 있으나, 위의 경우라면 개발된 어플리케이션의 소스와는 상관없이 A-ZONE에 있는 견고한 네트워크 장비들의 효력으로 엥간한 모의해킹으로는 취약점을 발견하기 어렵습니다. 하지만 반대로 생각하면 실제로 위와 같은 운영환경을 고려한다면, 실제로 위 어플리케이션을 서비스했을 때 그만큼 현실적으로 공격이 어렵다는 것을 증빙할 수 있겠죠.

하지만 "정적분석"의 경우에는 말이 다릅니다. 위에서 서술했듯이 정적분석은 소스코드를 대상으로 하기 때문에 위와 같은 A-ZONE 운영환경은 일단 분석대상에서 제외되고 A-ZONE의 갑옷을 모두 벗은 실제 어플리케이션 소스(B-ZONE)를 대상으로 분석결과를 산출합니다. 때문에 동적분석 시 발견되지 않았던 취약점들이 더 나올 확률이 높고, 더 나아가 모의해킹만으로는 발견하기 힘든 잠재적인 취약점까지도 탐지가 가능합니다.

그렇다면 어떤 것이 정확하고 뛰어난 분석방법일까요? 쉽게 정의내리기는 어렵겠지만, 이에 대한 정답은 어느 정도의 보안 정도를 원하느냐에 따라 사뭇 달라질 것입니다(Case by Case). 보안적인 측면에서보면 당연히 두 개의 분석방법을 모두 도입하여 분석하는 것이 가장 좋겠지만, 이에 대한 비용과 대비하여 그만큼 가치있는 정보 혹은 서비스를 가지고 있는가를 판단하고 자사의 서비스에 '비용 대비 최고의 효율'을 보여줄 수 있는 방법을 선택하는 것도 매우 중요한 문제가 될 것입니다.

 

동적분석과 정적분석의 분석범위(IBM Knowledge Center 자료)

위의 원 그래프에서와 같이 동적분석(DAST)과 정적분석(SAST)은 탐지해 낼 수 있는 영역이 서로 중복되는 부분도 있고 서로 다른 부분도 있습니다. 또한 두 분석방법으로도 탐지해 낼 수 없는 취약점 부분(원그래프에서 연두색 부분)도 있을 수 있구요.

때문에 가장 최선의 분석방법을 찾아내기 위해서는 보호되어야 할 자산 및 서비스에 대한 파악과 그에 대한 비용, 제반사항, 운영환경 등을 종합적으로 판단하는 단계가 선행되어야 할 것이며, 이를 위해 보안 전문 컨설턴트 등의 전문가의 자문을 활용하시는 것 또한 하나의 좋은 방법이 될 것 같습니다.

이상 "동적분석"과 "정적분석"의 포스팅을 마치고, 다음에는 더 알찬 보안이슈로 돌아오겠습니다.
모두 즐거운 하루되세요~!

  • 이전 차세대 방화벽의 정의, 기능, 중요성
  • 다음 해커들의 축제, 주목할만한 해킹대회