정보기술 ·
curl 프로젝트, 안전성 강화 위해 strcpy 함수 완전 퇴출...새 대체 함수 도입
오픈소스 네트워크 라이브러리 curl이 보안 취약점 예방 위해 C언어 표준 함수 strcpy 사용 금지하고 자체 개발 함수로 전환
[한국정보기술신문] 전 세계적으로 널리 사용되는 오픈소스 네트워크 라이브러리 curl의 개발자 다니엘 스텐버그가 12월 29일 자신의 블로그를 통해 curl 소스코드에서 strcpy 함수의 사용을 완전히 금지했다고 밝혔다. 이는 코드의 안전성을 높이고 잠재적인 보안 취약점을 사전에 차단하기 위한 조치다.
스텐버그는 앞서 strncpy 함수를 curl 코드베이스에서 제거한 바 있다. strncpy는 대상 버퍼를 null로 종료하지 않을 수 있고 대상 버퍼를 0으로 채우는 등 이상한 동작 방식을 가진 함수로 알려져 있다. 이번에는 strcpy 함수까지 제거 대상이 됐다.
strcpy의 문제점
strcpy 함수는 strncpy보다는 덜 혼란스러운 API를 가지고 있지만 여전히 문제가 있다. 가장 큰 문제는 대상 버퍼의 길이나 원본 문자열의 길이를 명시하지 않는다는 점이다. 이론적으로는 프로그래머가 두 가지를 모두 완벽히 통제할 수 있을 때만 사용해야 하지만 실제로는 그렇지 않은 경우가 많다.
특히 수십 년간 유지보수되는 코드에서는 다양한 개발자들이 코드를 수정하면서 버퍼 크기 검사와 함수 호출이 점점 멀어질 수 있다. 이 둘이 멀어질수록 그 사이에 검사를 무효화하거나 strcpy의 조건을 변경하는 일이 발생할 위험이 커진다.
새로운 대체 함수 curlx_strcopy
이러한 문제를 해결하기 위해 curl 프로젝트는 curlx_strcopy라는 새로운 함수를 도입했다. 이 함수는 대상 버퍼, 대상 크기, 원본 버퍼, 원본 문자열 길이를 모두 인자로 받는다. 복사가 가능하고 null 종료 문자도 들어갈 수 있을 때만 작업이 수행된다.
함수 내부는 memcpy를 사용해 구현됐다. 원본 길이가 대상 크기보다 작은지 DEBUGASSERT로 확인하고, 조건이 맞으면 memcpy로 복사한 뒤 마지막에 null 종료 문자를 추가한다. 조건이 맞지 않으면 대상 버퍼가 있는 경우 빈 문자열로 만든다.
스텐버그는 이 함수가 strcpy보다 사용하기 번거롭고 더 많은 정보가 필요하지만 장기적으로 이점이 단점을 상쇄할 것으로 믿는다고 밝혔다.
AI의 잘못된 보안 경고도 차단
이번 변경의 부수적인 효과로 AI 챗봇이 curl 소스코드에서 strcpy를 발견하고 보안 취약점이라고 주장하는 일도 막을 수 있게 됐다. 스텐버그는 소스코드의 strcpy가 AI에게는 허위 취약점 보고를 생성하는 미끼 같은 역할을 했다고 지적했다.
다만 그는 이것이 AI의 잘못된 보고를 완전히 막지는 못할 것이라며, AI는 다른 것을 찾아 허위 보고를 만들어낼 것이기 때문에 순이익은 없을 것이라고 덧붙였다.
curl 프로젝트의 이러한 노력은 오픈소스 소프트웨어의 보안성을 높이기 위한 지속적인 개선 작업의 일환이다. 수십억 개의 기기에서 사용되는 curl의 안전성 강화는 전체 인터넷 생태계의 보안에도 긍정적인 영향을 미칠 것으로 예상된다.
한국정보기술신문 정보보안분과 안서진 기자 news@kitpa.org