자세히 보기

Paul Krill
Editor at Large

메모리 안전성 우려에… ‘C++의 아버지’ 비야네 스트롭스트룹 나섰다

美 국가안보국(National Security Agency; NSA)은 해커들이 메모리 문제를 자주 악용하기 때문에 가능하다면 C/C++ 대신 메모리 안전을 보장하는 프로그래밍 언어를 사용하라고 권장했다.

NSA가 이 유서 깊은 프로그래밍 언어를 쓰지 말라고 권고하자 C++를 개발한 덴마크의 컴퓨터 과학자 비야네 스트롭스트룹이 항변에 나섰다. 

1979년 C++를 설계한 스트롭스트룹은 2022년 11월 발표된 NSA의 소프트웨어 메모리 안전 지침에 대응하여 지난 수십 년 동안 더 개선되고, 더 안전하며, 더 효율적인 C++를 구축해왔다고 강조했다. 그는 “이러한 작업은 [안전] 보장 없이 관리해야 하는 코드 기반을 중단하거나 추가 도구 체인을 도입하지 않고도 정적으로 보장된 유형-안전 및 리소스-안전 C++ 제공을 목표로 했다”라고 밝혔다

한편 NSA는 C/C++ 사용을 권장하지 않고 있다. 개발자가 코드 안전성을 확인하는 엄격한 테스트를 실시하긴 하지만 소프트웨어의 메모리 문제가 [여전히] 악용되는 취약점의 많은 부분을 차지하기 때문이다. “가능하다면 메모리 보호 기능을 거의 또는 전혀 제공하지 않는 프로그래밍 언어에서 메모리 안전 언어로 전략적 전환을 고려하라”라고 NSA는 권고했다. 

NSA에 따르면 메모리 안전 언어에는 C#, 고, 자바, 루비, 러스트, 스위프트 등이 있다. 이어 “C와 C++는 메모리 관리의 자유와 유연성을 제공하긴 하지만 개발자에 과도하게 의존한다”라고 전했다. 

하지만 스트롭스트룹은 [C++의] 안전성이 개선됐다고 말했다. 그는 “C++보다 더 ‘안전한’ 언어를 고려한다면 C/C++와 멀어지는 게 나쁘다고 생각하진 않는다. 하지만 사실은 그렇지 않다. 여기에서 ‘안전성’은 메모리 안전에 국한되며, 언어가 어떤 안전과 보안을 침해하기 위해 악용될 수 있는 수십 가지 다른 방법을 제외한다”라고 설명했다. 

그는 NSA가 ‘C++’와 더 오래된 ‘C’ 언어를 한 쌍으로 엮었다는 점도 지적했다. 스트롭스트룹은 ‘클래스(Class)를 더한 C’라고 불렸던 C++는 C 언어의 확장이라면서, “C와 C++를 하나의 범주(C/C++)로 묶어버린 탓에 [C++에서 이뤄진] 30년 이상의 발전을 무시했다. 하나의 범주처럼 굳어져 버린 C/C++를 이야기할 때 사실상 C의 문제에 초점이 맞춰진다. C++에서는 이러한 취약점의 대부분을 피할 수 있다. 개발자의 의도를 직접적으로 표현하는 효율적인 코드를 작성할 수 있어서다”라고 전했다. 

아울러 스트롭스트룹은 인포월드(InfoWorld)와의 서면 인터뷰에서 그가 ‘안전’을 어떻게 정의하는지도 공유했다. 그는 “모든 객체가 그 유형에 따라 사용되고 리소스가 누출되지 않는 유형 및 리소스 안전을 목표로 한다. C++에서 이는 일부 런타임 범위 검사, 댕글링 포인터를 통한 액세스 제거, 캐스트 및 유니언 오용 방지를 의미한다. C++는 생산성이나 효율성을 손상시키지 않고 개런티를 제공할 수 있는 컨테이너, 범위, 범위 루프 및 변형 등 높은 수준의 기능을 제공한다”라고 설명했다.

NSA가 인용한 이른바 ‘안전한 언어’와 관련해 그는 모든 언어가 정적으로 확인되지 않은 코드를 거칠 때 취약하다고 밝혔다. 게다가 모든 시스템은 하드웨어를 사용해야 하며, 효과적인 하드웨어 액세스는 거의 안전하지 않다고 덧붙였다. 스트롭스트룹은 C++를 안전하게 사용하기 위한 전략을 공유했다. 

• 안전하지 않은 코드가 실행되지 않았는지 확인하기 위한 정적 분석
• 산업 규모의 정적 분석을 실행할 수 있도록 코드를 단순화하는 코딩 규칙
• 단순화된 코드를 쉽게 작성하고 필요하다면 런타임 검사를 보장하는 라이브러리

이어 그는 수백만 명의 C++ 개발자와 수십억 개의 C++ 코드 라인이 있다고 언급했다. 현재 이 언어의 주요 용도는 항공우주, 의료기기, AI/ML, 그래픽, 바이오의약품, 고에너지 물리학 등이다. 

한편 NSA는 메모리 관리가 ‘메모리 안전’ 언어에서도 완전하게 안전하지 않으며, 정적 및 동적 애플리케이션 보안 테스트(SAST 및 DAST) 등의 메커니즘을 사용하여 메모리 안전성이 높지 않은 언어에서도 메모리 안전을 개선할 수 있다고 인정했다. 하지만 SAST, DAST 역시 메모리 안전성이 높지 않은 코드를 완전히 안전하게 만들 순 없다고 NSA는 덧붙였다. dl-ciokorea@foundryco.com

Paul Krill

Paul Krill is editor at large at InfoWorld. Paul has been covering computer technology as a news and feature reporter for more than 35 years, including 30 years at InfoWorld. He has specialized in coverage of software development tools and technologies since the 1990s, and he continues to lead InfoWorld’s news coverage of software development platforms including Java and .NET and programming languages including JavaScript, TypeScript, PHP, Python, Ruby, Rust, and Go. Long trusted as a reporter who prioritizes accuracy, integrity, and the best interests of readers, Paul is sought out by technology companies and industry organizations who want to reach InfoWorld’s audience of software developers and other information technology professionals. Paul has won a “Best Technology News Coverage” award from IDG.

이 저자의 추가 콘텐츠