시큐어코딩(Secure Coding) 하면 대부분 보안부터 연상한다. 궁극적으로 보안성을 높이는 것은 맞지만 좁은 해석이다. 올바른 의미는 소프트웨어(SW)를 개발하는 모든 과정에서 코딩(프로그래밍) 시 실수로 혹은 고의적으로 오류나 약점, 취약점이 삽입되지 않도록 프로그래밍하고 서비스하는 것이다. 악의적 사이버 공격을 사전 차단하기 위함이다.
사람들이 건강한 삶을 위해 평소에 꾸준한 운동과 건강관리로 질병이나 만성질환에 시달리지 않고 즐겁게 생활하는 것과 같다. 애초에 건강하고 튼튼하게 시스템을 개발하면 높은 수준 해커라도 쉽게 침입하지 못하는 이치다.
비행기는 구매 계약서에 고객 서명이 이뤄지면 작업에 착수한다. 계속 만들어 판매하는 자동차와는 다르다. 각 부품을 모두 각기 다른 공장에서 동시에 병렬로 제작하고 한곳으로 모아 조립하는 구조다. 사소한 고장이 엄청난 인명 피해로 이어지는 비행기 특성상 엄격한 증명 과정을 거친다. 보잉사는 비행기 제작 시 하드웨어나 SW 오류가 검출되면 몇 달 동안 공정을 멈추고 원인 분석에 들어간다. 몇 달이고 업무를 중단하는 것이다.
이 과정을 SW에 적용하면 어떤가. SW코드는 개발 중간 동안에는 큰 위험을 만들지 않는다. 제품이 출고된 후에는 여러 문제가 발생할 수 있다. 버그 해결을 위한 비용 소모도 막대하다. SW회사는 문제 해결을 위해 수없이 많은 패치를 내놓아야 한다.
시큐어코딩 의무화 유예기간이 지나 올해부터는 정부·공공기관에서 발주하는 정보시스템 개발 사업에는 반드시 적용된다. 시큐어코딩이라는 용어 자체가 낯설게 들리지는 않으나 자칫 개발 과정에서만 주의하면 될 것이라고 오해할 수 있다. SW를 안전하게 만들기 위해서는 생명주기 전체과정(개발 관계자 교육→요구사항 분석→기획→설계→개발→단위시험→통합시험→서비스 제공→운영·관리 등)에서 안전하게 프로그래밍하도록 단계마다 필히 수행하는 작업이 있다.
엄밀히 말해 시큐어코딩은 이 중에서 개발 과정에 주로 수행하는 것을 말한다. 전체 과정에서 단계별 작업을 거쳐 안전하고 튼튼한 SW·정보시스템을 개발하면 웬만한 사이버 공격이나 위협은 문제가 안 된다. 고수준 해킹 공격자도 피해갈 수밖에 없다. 건강한 시스템을 해킹하는 것보다 더욱 손쉽게 해킹하는 병든 시스템도 존재하기 때문이다.
기본적으로 개발자가 시큐어코딩 작업을 수행했는지 수시로 점검하도록 점검도구를 활용하는 때에 지원금 등 인센티브 제공이 필요하다. SW를 안전하게 개발하도록 유도하는 한 방법이다. 사업 발주처에서 시큐어코딩을 요구하면서 늘어나는 개발 비용을 인정하지 않는 경향이 있다. 하지만 사업 시작 초기 약간 추가비용으로 향후 겪게 될 천문학적 오류·취약점 수정 보완 비용을 아낄 수 있다.
시큐어코딩은 정착 단계에 접어들었다. 이제 과정별로 필요한 사항을 추가 발굴하고 개발하는 작업이 필요하다. 정책적으로 SW개발 생명주기 모든 단계를 거쳐 개발하는 프로젝트에는 개발 기간을 충분히 제공해야 한다. 사전·사후 점검과정으로 인센티브 제공 방안도 강구해야 한다. 단계별로 지킬 가이드라인 등을 개발해 배포하고 전문기관 설립을 테스트·컨설팅 서비스 제공도 필요하다.
도구와 서비스를 제공하는 기업은 SW 취약성 점검도구를 개발자 환경을 고려해 UI/UX를 손쉽게 만드는 것도 중요한 요소다. 개발자는 SW 안전성과 시큐어코딩을 위해 품질도구와 시큐어코딩 도구를 적절히 조합해 사용하면 효과적이다. 물론 높은 검출력과 낮은 오탐률을 가진 좋은 도구를 선별해 사용하는 것은 당연하다.
최근 SW 안정성 확보를 위해 미국 국방부, 국토안보부, 국가안보국(NSA) 등 연방 정부기관에서 ‘SW보증과 공급망 사슬 보증(SSCA)’을 중점적으로 연구한다. 미국 정부는 SW 신뢰성 확보와 산업 경쟁력 제고를 최우선 정책으로 추진한다. 특히 사이버 정책관이 NSC/NEC로 컨트롤타워 역할을 수행한다. 이제부터라도 개발되는 SW에 안정성을 보증하면서 공급망 사슬까지 튼튼하게 관리하고 유지하는 보증체계를 만들어낼 것을 기대해본다.
한근희 고려대학교 교수 khhan@formal.korea.ac.kr