버퍼 오버플로우
프로그램이 할당된 메모리 공간보다 더 많은 데이터를 기록하거나 읽을 때 발생하는 메모리 안전성 취약점입니다. 주로 C/C++과 같이 메모리를 직접 관리하는 언어에서 문제가 발생하며 입력 데이터의 길이를 제대로 확인하지 않는 것이 대표적인 원인입니다. 버퍼 오버플로우가 발생하는 경우 버퍼의 경계를 벗어난 데이터가 인접한 메모리를 덮어쓸 수 있습니다. 이로 인해 프로그램이 비정상 종료되거나 데이터가 손상되고, 심각한 경우 시스템 전체가 침해될 수 있습니다.
공격자는 버퍼 오버플로우 취약점을 이용해 서버를 마비시킬 수도 있고, 시스템의 권한을 탈취해 다른 공격을 수행할 수도 있습니다. 예를 들어, 과도한 데이터를 입력하고 프로그램이 강제로 종료되게 만들거나 메모리 오염을 통해 정상적인 방법이 아닌 악성 코드를 실행하도록 만듭니다.
버퍼 오버플로우가 발생하지 않기 위해서 입력하는 값의 길이와 버퍼 크기를 명확하게 검증해야 합니다. 또한, 메모리 안전성이 확보된 API와 언어 기능을 사용하고, 컴파일러의 보호 기능을 활성화하는 것이 도움이 됩니다. ASLR, DEP/NX, Stack Canary 등의 방어 기법도 피해를 줄이는 데 활용됩니다.
대표 사례는 다음과 같습니다. 2003년 SQL Slammer Worm이라는 웜 바이러스가 MS SQL Server의 버퍼 오버플로우 취약점의 허점을 이용하여 빠르게 확산되어, 국내에서는 인터넷이 마비되는 ‘1·25 인터넷 대란’을 일으켰습니다. 또한 2023년 Citrix NetScaler의 버퍼 오버플로우 취약점(Citrix Bleed)으로 로그인 세션 정보가 유출되어, Boeing과 중국공상은행(ICBC) 미국 법인 등이 랜섬웨어 공격을 받았습니다.

