악성코드를 통한 피해는 오랫동안 계속됐다. 그리고 안전하지 않은 소프트웨어 코드를 통한 피해는 지난 수십 년 동안 여러 번 악용됐고 물리적 세계에서도 광범위한 피해를 초래했다. 이는 국가적인 해킹뿐만 아니라 악의적인 내부자(코드가 실행되는 조직에 근무하는 자), 실수로 인한 피해, 실제 사용 전 테스트가 부족해 발견되지 않는 코딩 오류가 있는 소프트웨어 코드 등에서 발생한다.

잘못된 코딩으로 인한 피해 사례

소프트웨어 코딩 오류, 버그 및 결함으로 인해 1999년부터 2015년까지 수백 년 된 영국 정부기관에서 돈이 사라진 것으로 잘못 표시됐다. 이러한 컴퓨터 코드 문제가 발견됐지만 문제를 해결하기 위해 아무런 조치도 취하지 않았다. 그 결과 영국 우체국 은행 직원 700명이 유죄 판결을 받았고 일부는 감옥에 갔다. 이 오류는 이들의 생계와 명성을 파괴했다. 많은 피해자들이 파산해 저축한 재산을 모두 잃었다. 어떤 사람들은 그로 인한 고통으로 인해 자살하기도 했다. 우체국은 배상금으로 1억 3800만 파운드(한화 약 2300억 원) 이상을 지불해야 했으며 더 많은 소송이 진행되고 있다.

테락-25(Therac-25) 방사선 치료 기계의 프로그래밍 오류로 인해 대량의 엑스레이를 받은 후 5명의 환자가 사망했다. 이 재난은 코드의 여러 부분이 동시에 동일한 작업을 수행하도록 만드는 소프트웨어 코드 오류 때문에 발생한 것으로 알려졌다.

2000년대 후반 미국에서 100만 명에 가까운 의료 전문가가 사용했던 eCW(eClinicalWorks)의 전자 건강 기록 시스템(EHR)은 스파게티 코드처럼 너무 버그가 많아서 하나의 결함이 해결되면 다른 결함이 발생하는 것으로 확인됐다. 그 결과, 부정확한 환자 기록, 의학적 결정을 내리는 의사에게 잘못된 환자 기록을 보여주는 것, 소프트웨어 결함, 사용자 오류 또는 기타 시스템과 관련된 수천 건의 사망, 심각한 부상 및 사고에 대한 놀라운 보고가 수년 동안 쌓여 왔다.

2017년에 보안 연구원들은 메드트로닉 미니메드(Medtronic MiniMed)와 미니메드 패러다임(MiniMed Paradigm) 인슐린 펌프에서 결함이 있는 소프트웨어를 발견했는데, 이는 범죄자들이 쉽게 악용해 위험할 정도로 낮거나 치명적으로 높은 인슐린 수치를 투여해 사용자를 죽일 수 있는 것이었다. 제조업체는 전 세계적으로 리콜을 실시해야 했다.

1991년 2월 25일 걸프전 중 패트리어트 미사일의 고장으로 인해 스커드 미사일이 실종됐고, 이 미사일은 미 육군 막사를 강타해 28명의 군인이 사망하고 100여 명이 부상을 입었다. 이는 사용 중인 컴퓨터 하드웨어와 관련 소프트웨어 오류 및 문제로 인해 발생했다.

2018년 3월, 소프트웨어 코드 오류로 인해 한 여성이 자율주행차에 치여 사망하는 사건이 발생했다. 스마트카 및 자율주행차의 소프트웨어 코드 오류 때문에 발생한 사고의 수는 책 한 권을 채울 정도다.

에어버스는 소프트웨어 구성 오류로 인해 에어버스 A400M이 추락했다는 사실을 확인했다. 비행 기록 데이터를 통해 소프트웨어 구성 오류가 드러났다. 몇 달 전 탑승자 157명 전원이 사망한 에티오피아 보잉 737 맥스 추락 사고는 이후 동일하거나 유사한 소프트웨어 오류로 인해 발생한 것으로 의심됐다.

2021년에는 해커들이 캘리포니아와 플로리다의 수처리 공장을 성공적으로 손상시키고 소프트웨어 애플리케이션 설정을 변경해 지역 사회 주민들의 물을 오염시키는 데 성공했다는 여러 보고서가 발표됐다.

이러한 예에서 보듯이 잘못 코딩된 소프트웨어는 개인정보 침해와 보안 사고뿐만 아니라 사람들의 삶을 망치고 심지어 사망에 이르게 할 수도 있다. 보안 코딩 관행은 이러한 비극이 발생하지 않도록 하는 데 크게 도움이 될 수 있다. 전 세계의 정부기관들은 기술 업체들에게 공공 안전을 개선하기 위해 보안 코딩을 연습하라고 경고하고 있다.

잘못된 코딩 예방법

사이버 보안 전문가이자 교육자이며 NSA 공인 대학 프로그램 제작자인 카바이(M.E. Kabay) 박사는 온라인 교육 플랫폼인 PSB(Privacy & Security Brainiacs)를 위한 과정을 만들어 제공하고 있다. 그는 보안 코딩 과정에서 프로그래머와 정보 기술 관리자들이 유해하고 치명적인 소프트웨어 생성을 방지하는 데 필요한 정보를 제공한다.

카바이 박사는, 문제에는 특정 유형의 문제를 피하는 것과 같은 기술적인 문제뿐만 아니라 코드에 오류가 있다는 것을 보여주고 이에 집중할 수 있도록 사람들을 관리하는 것도 포함된다고 설명했다. 오류가 없다는 것은 철저한 테스트를 하지 않은 것일 수도 있다.

이해관계 충돌 방지 등 행정적인 문제도 있다. 예를 들어, 소프트웨어 품질 보증 책임자는 프로그래밍 책임자에게 보고해서는 안 된다. 두 사람 모두 조직의 최고 정보 책임자(CIO)에게 보고해야 한다.

기술적인 문제에 대해서는 다음 사항을 권장한다.

① 디자이너와 프로그래머가 코드를 철저하게 문서화한다.

② 민감한 데이터를 저장할 때 전역 변수가 아닌 지역 변수를 사용한다.

③ 최종적으로 적법하게 사용한 후 임시 저장소를 다시 초기화한다.

④ 각 모듈의 기능을 특정 요구 사항으로 제한한다.

⑤ 데이터베이스의 민감한 데이터에 대한 접근을 제한한다.

⑥ 강력하고 잘 확립된 암호화를 사용한다.

⑦ 프로그래머가 프로덕션 데이터에 액세스하는 것을 절대 허용하지 않는다(사본만 사용 가능).

⑧ 테스트 데이터 세트를 생성할 때 민감한 데이터를 마스킹한다.

⑨ 테스트 범위 모니터를 사용한다.

⑩ 모든 애플리케이션에 세부 로깅을 통합한다.

⑪ 레코드 수준 잠금을 사용한다.

⑫ 코드 인증 및 해킹 방지를 위해 디지털 서명 기술을 적용한다.

PSB는 보안 코드를 사용하지 않는 것이 우리 사회 전체에 미치는 영향은 광범위하고 치명적이라고 지적했다. AI는 소프트웨어로 코딩된 알고리듬을 사용해 구현되지만, 사실상 모든 AI 도구는 정확한 보안과 개인정보 보호가 해당 코드 내에서 설계되고 철저하게 테스트됐다는 객관적이고 명시적인 검증 없이 사용되고 있는 게 현실이다.

따라서 PSB는, 증가하는 개인정보 침해∙보안 사고 및 신체적 피해를 줄이기 위해 일반 대중이 사용하거나 일반 대중에게 영향을 미치는 애플리케이션을 제공하는 모든 조직에서는 보안 코딩 관행을 채택하는 것이 필요하다고 강조했다.

관련기사

저작권자 © 지티티코리아 무단전재 및 재배포 금지