가장 실제적인 보안은 “알고 있는 것들에 대한 방어를 완벽히 하는 것”
[보안뉴스 문가용] IT 환경이 애플리케이션 위주로 개편됨에 따라 보안도 애플리케이션 위주로 다시 구성되고 있다. 이에 따라 기존 보안 솔루션 및 개념들이 점점 무용지물로 변해가고 있으며, 애플리케이션을 만드는 개발자들과 그 애플리케이션이 범람하는 환경의 안전을 유지해야 하는 보안 담당자들이 점점 서로의 업무 영역을 넘나들 필요가 생기고 있다.

▲ 안 가본 길이 이렇게나 많은데, 매일 새로운 길만 개척할 수는 없다
그러나 정보보안과 개발은 비슷한 듯 다른 분야라 서로를 이해하는 게 결코 쉽지 않다. 어제 예레미야 그로스만(Jeremiah Grossman)이라는 보안 관련 기고가는 본지 칼럼을 통해 “공격자의 관점에서 시행되는 개발 및 보안 교육”을 제안했다. 하지만 교육은 백년대계라고 불릴 만큼 ‘장기적인’ 차원에서 더 높은 효율을 보이는 방법이다. 애플리케이션의 범람은 어제와 오늘 급격히 변하고 있는데 교육의 효과는 느리기만 하다. 뭔가 조금 더 급히 적용이 가능한 해결책이 필요하다.
그 급한 해결책 중 하나가 시큐어코딩이다. 시큐어코딩은 보안 분석과 닿아있기 마련인데, 보안의 분석은 정적분석과 동적분석으로 나뉜다. 말 그대로 애플리케이션을 멈춰놓고 분석하는 게 정적분석이고 애플리케이션을 실행시켜 놓고 분석하는 게 동적분석이다. 병원에서도 환자를 눕혀놓고 진찰하기도 하고 여러 가지 동작을 해보게 하면서 진찰하기도 하는데 그것과 마찬가지다. 환자를 앉히거나 눕힌 상태에서 하는 진찰이 보편적이듯 보안 분석 분야에서도 정적분석이 보다 널리 실행되고 있다는 것도 비슷하다.
정적분석의 특징은 :
- 코드의 전체적인 상황이 한 눈에 파악 가능하다
- 개발 단계에서 버그를 잡아내는 것이므로 가격 대비 효율이 높다
- 동적분석에서 잡아내기 힘든 오류를 잡아낼 수 있다
- 소프트웨어를 실행할 필요가 없다
동적분석의 특징은 :
- 실제 사용상의 문제점을 찾아내는 데 유용하다
- 사후 대처를 해야 할 경우 가격이 훨씬 높아진다
- 정적분석에서 잡아내기 힘든 오류를 잡아낼 수 있다
- 소프트웨어의 실행과정과 결과에 초점을 맞춘다
그러나 말이 쉽지 개발자에게 있어서 정적분석이든 동적분석이든 자기가 만든 코드 내에서 실행 오류나 논리 오류가 아니라 ‘보안 오류’를 잡아낸다는 게 절대 쉬운 일이 아니다. 예를 들어 평소 하던 대로 특정 포트를 발동시키는 명령줄을 삽입했을 뿐인데, 그게 하필 해당 환경에서는 보안에 취약한 포트라는 걸 기억해내는 게 쉽지 않다는 것이다. 시큐어코딩으로 프로그래밍을 하고, 중간중간 정적 분석을 통해 보안을 점검하고, 나중에 실행까지 해보면서 잠재적 보안 구멍을 찾아내는 걸 다 할 줄 알면 참 좋겠는데, 우리 뇌의 학습량에는 한계가 분명하다. 이 분야의 높은 난이도를 알고 있다면, 교육에‘만’ 의지하는 건 문제를 먼 훗날로 미뤄놓는 것이나 다름 없을 수도 있다.
당장의 허기를 해결해야 꿈도 희망도 가능하다
그런 맥락에서, 개발자들이 어려움을 호소하는 보안 점검 및 분석을 보다 쉽게 바꿔줄 수만 있다면 시큐어 코딩에 대한 부담감도 덜어주고, 더불어 보안은 더 강력해질 수 있지 않을까? 그래서 등장한 것이 IAST(Interactive Application Security Testing)이다. 정적분석과 동적분석의 좋은 점을 합해 애플리케이션의 총체적인 보안을 꾀하는 기법이다. 이를 개발한 콘트라스트 시큐리티(Contrast Security)의 마이클 카트소니스(Michael Cartsonis) 제품부 부사장은 “정적분석의 취약점 진단 커버리지가 30%, 동적분석이 20%였다면 IAST는 100%에 가깝다”고 자신한다.
애플리케이션에는 코드, 라이브러리, 프레임워크, 애플리케이션 서버 등 다양한 구조로 구성되어 있는데 콘트라스트 시큐리티는 애플리케이션 내부 곳곳에 일종의 가상 센서인 ‘에이전트(agent)’를 심어 둠으로써 IAST 기법을 구현한다. 소스코드와 라이브러리에도 에이전트가 들어가 있기 때문에 정적분석의 장점인 코드 분석도 가능하며, 여러 곳에 배치되어 데이터의 흐름을 실시간으로 모니터링하기 때문에 동적분석의 장점도 살린다. 일단 기본적으로 기능 자체는 충분히 강력하다고 볼 수 있다.
그렇다면 중요한 건 사용성. 아무리 강력한 솔루션이라도 사용자들(여기선 개발자)이 어렵다고 느끼면 당장의 해결책이 될 수 없다. 이에 카트소니스 부사장은 설치과정과 프로세스의 부재라는 장점을 설명하기 시작했다. “이 에이전트는 별도의 프로세스가 아닙니다. JAR 파일이죠. 설치 과정이 필요 없습니다. 또한 별도의 소스 수집도 필요 없고 사용자의 사용 패턴 모두가 모니터링 대상이기 때문에 심지어 따로 테스트를 해보거나 애플리케이션을 잠시 오프라인으로 만들어둘 필요도 없습니다.” 시스템에 로드가 안 걸리고, 설치에도 시간을 따로 내야 할 필요가 없다는 것.
여기에 특히 획기적인 건 교육도 필요 없다는 것이다. 한국에서 콘트라스트 서비스를 대행하고 있는 코어스넷의 강태욱 이사는 “이 에이전트가 정적/동적 분석을 끝내면 개발자에게 자동으로 이메일을 발송한다”며 “특히 코드에서 어떤 부분이 취약한지, 직접 발췌해서 알려주고 어떤 취약점이 발생했는지도 같이 알게 해준다”고 강조한다. 개발자가 이해하기 쉽도록, 개발자의 언어로 수정 요청 메일을 자동 발송한다는 것이다. “처음 사용해보는 사람도 쉽게 소스코드를 안전하게 수정할 수 있어서 따로 훈련을 받을 필요가 없습니다. 즉시 현장투입이 가능하다는 것이죠.”

▲ 개발자가 받는 수정 요청 이메일 예
또한 현대 애플리케이션이 순수한 코딩 창작에 의해 만들어지기보다 외부 라이브러리를 차용해 ‘짜집기 형태’로 만들어지고 있다는 것도 간과하고 있지 않다. 하지만 외부 라이브러리의 취약점 점검을 하는 건 어렵고 때론 법에 저촉되기도 한다. “그런 경우 누구에게나 공개되는 CVE 데이터베이스와 라이브러리의 최신 정보에 비추어 취약점을 찾아냅니다.” 즉, 이미 알려지고 공개된 취약점들에 대해서는 빠르고 ‘쉬운’ 대응이 가능하도록 한다는 것이다.
그렇다면 알려지지 않은 공격에 대해서는 어떻게 대처하는가? 카트소니스는 “우리가 아는 공격의 대부분은 이미 알려진 취약점을 통하거나 기법을 사용한 공격들”이라고 강조한다. “혁신적이고 새로운 기법들은 아주 드물게 출현합니다. 그런 것들에 초점을 맞추는 건 현실감각이 떨어지는 겁니다. 아는 공격들만 다 차단할 수 있어도 우린 ‘안전하다’고 말할 수 있을 겁니다.”
또한 “새로운 공격법을 만들어내는 건 사람인데, 그것을 기계한테 대처하라고 맡기는 건 어불성설”이라고 못 박기도 했다. “새로운 공격 수단을 예상하고 발견하고 대처하는 건 아직은 분명히 사람의 영역에 있습니다. 기존에 알려진 공격들에 최대한 빠르게 대처하는 기술을 도입해 시간을 아낄 수 있다면, 사람의 영역에 있는 일들에 보다 더 집중할 수 있겠죠. 지금은 보다 방어적인 방어를 해야 할 때라고 봅니다. 그게 지금 당장은 가장 현실적이고 실제적인 겁니다.”
[국제부 문가용 기자(globoan@boannews.com)]
<저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지>