화면낭독기 사용시 다음 링크들을 이용하면 더 빠르게 탐색할 수 있습니다.
 
즐겨찾기 문화일보 PDF

[DT 광장] 시큐어코딩, 의미기반 기술 이용해야

 

입력: 2013-01-02 20:16
[2013년 01월 03일자 23면 기사]

원본사이즈   확대축소   인쇄하기메일보내기         트위터로전송 페이스북으로전송 구글로전송
[DT 광장] 시큐어코딩, 의미기반 기술 이용해야
정영범 파수닷컴 PA사업팀장
소프트웨어 보안 약점을 개발 단계에서부터 제거하도록 하는 SW개발보안(시큐어코딩) 의무화가 40억 이상의 국가 정보화 사업 대상으로 시행되고 있다. 시큐어코딩 적용 의무화는 소프트웨어 개발보안 가이드를 기반으로 개발단계에서 제거해야 할 43가지의 보안 약점을 사전에 제거하도록 하여 사이버 공격 등을 통해 발생할 수 있는 보안 사고를 방지하도록 하는 법안으로 적용대상을 단계적으로 확대하여 2015년부터는 모든 공공정보화 사업에 적용된다.

시큐어코딩 의무화가 제대로 정착하기 위해서는 시큐어코딩 진단 도구의 사용이 필수적이다. 특히 진단도구 중에서도 소프트웨어 오류를 개발단계에서부터 제거할 수 있도록 도와주는 정적 분석 도구의 도입은 비용 대비 큰 효과를 얻을 수 있다. 어떤 분야든 마찬가지겠지만, 소프트웨어 오류는 조기 발견이 중요하기 때문이다. 소프트웨어를 개발 완료하여 테스트까지 마친 후에 고객의 환경에서 돌아가는 소프트웨어에서 만약 오류가 발생한다면 그 오류의 원인을 파악하고 수정하기 위해 들여야 하는 비용이 얼마나 클지 쉽게 상상할 수 있다. 2002년 미국 국가 표준 기술(NIST, National Institute of Standards and Technology) 연구소의 보고에 따르면, 제품출시 이후에 오류가 발생했을 때 드는 비용이 코딩단계에서 오류가 발생했을 때의 비용보다 무려 30배나 크다.

시큐어코딩 가이드에 소개되는 대부분의 보안 취약점과 치명적인 실행 오류들을 검출하기 위해서는 문법이나 타입을 검사하는 것보다 고차원의 정적 분석 기술이 필수적이다. 프로그램이 실행 중 잘못된 동작을 하거나 비정상 종료하게 하는 오류들은 프로그램 일부분을 보고 판단하기에 어려운 경우가 많기 때문이다. 치명적인 소프트웨어 오류 중 하나로 0으로 나누기 오류가 있다. 0으로 나누기는 수학적으로 정의가 되어 있지 않기에 Java 언어 같은 사용자에 가까운 언어(high-level language)에서는 프로그램 내에서 0으로 나누려 하면 예외 상황을 발생시켜 적절한 조치를 할 수 있다. 하지만 C 프로그램 같은 기계어에 가까운 언어(low-level language) 에서는 프로그래머가 0으로 나누라고 시키면 시키는 대로만 작동하는 프로그램은 실제로 0으로 나누려 한다. 컴퓨터는 당연히 못하겠다고 하여 프로그램이 비정상 종료하게 된다. 이때 대부분 프로그램의 어느 위치에서 오류가 발생했는지도 알 수 없고, 심지어 프로그램이 실행 중 0으로 나누었기에 종료되었다는 상황조차 알지 못하기도 한다.

이런 어려운 오류를 검출하기 위한 정적 분석 기술을 겉모습이나 패턴만 보고 검출하는 방식과 대비하여 의미 기반 정적 분석(semantic-based static analysis)이라고 부른다. 의미 기반 정적 분석은 프로그램의 실행 흐름과 각 프로그램 구문의 의미를 이해하여 실행 중 프로그램 상태를 예측하는 기술이다. 0으로 나누기 오류를 자동으로 검출하기 어려운 이유는 나누는 값에 영향을 주는 부분이 프로그램의 어느 부분인지 겉모습만 보아서 알 수가 없기 때문이다. 프로그래머가 호기심으로 작성한 프로그램이 아니고서야 x/0 처럼 0으로 직접 나누는 프로그램은 존재하지 않는다. 이러한 알람 정도는 소스코드의 겉모습만 보고 찾는 분석으로도 충분히 검출 가능하다.

정적 분석 기술은 개발 중에 소프트웨어의 오류를 제거해주는 장점이 있지만 오탐 혹은 미탐이라는 분명한 단점도 가지고 있다. 오탐(false positive)은 실제 오류가 아닌데 오류라고 하는 것이고, 미탐(false negative)은 실제 오류가 존재함에도 검출하지 못하는 것이다. 정적 분석 기술은 태생적으로 완벽할 수가 없다. 완벽한 정적 분석이 가능하다는 것은 그 유명한 정지 문제(Halting Problem)를 풀 수 있다는 것과 동치이다. 정지 문제는 풀 수 없다는 것이 이미 증명되었기에 완벽한 정적 분석이 불가능하다는 결론을 얻는다. 정적 분석이라는 것이 실행 중에 결정될 수 있는 정보를 모르는 상태에서 실행 의미를 예측하는 것이기에 이는 어쩔 수 없는 결과이다. 결혼 전에 보는 궁합과 실제 결혼 생활, 기상청의 날씨 예보와 실제 날씨, 대입 수능의 성적과 실제 대학에서의 수학 능력이 완벽하게 일치하지는 않는 것처럼.

특히 오탐은 정적 분석 도구의 도입을 주저하게 하는 치명적인 요소이다. 정적 분석 도구가 5개의 실제 오류를 찾아 주더라도 이후에 도구가 검출하는 5개의 알람이 허위 경보이면 개발자로부터 금세 신뢰를 잃게 마련이다. 정적 분석 도구의 사용이 오히려 시간과 인력의 낭비로 이어지지 않도록 정적 분석기는 정확한 검출 능력을 갖추고 있어야 한다.

오탐 및 미탐을 최소화하기 위해서도 정적 분석 기술은 의미 기반의 분석이어야 한다. 프로그램의 겉모습이나 패턴으로 오류를 찍어 보는 것이 아니라 실제 실행 의미를 이해하고 오류의 발생 원인까지 추적할 수 있어야 한다. 몇 년 전까지만 해도 이러한 기술 구현을 위해서는 외산 제품에 의지해왔지만 국내 기업들의 기술력이 향상되면서 외산 못지 않은 수준 높은 정적 분석 도구들이 시장에 나오고 있다. 시큐어코딩 가이드 의무화를 넘어 실질적인 소프트웨어의 품질향상을 꾀하기 위해서는 시장에 나와있는 제품들을 철저히 비교하여 오탐이 적으면서도 치명적인 오류를 찾아내는 정확한 정적 분석 도구 선택이 무엇보다 중요하다.

정영범 파수닷컴 PA사업팀장

[저작권자 ⓒ디지털타임스 무단 전재-재배포 금지]
DT Main
선풀달기 운동본부
연예 섹션