데브허브 | DEVHUB | 5 ways to shoot yourself in the foot with C5 ways to shoot yourself in the foot with C
- C 언어는 현대 프로그래밍 언어의 기반이자 운영체제, 컴파일러 등 핵심 소프트웨어의 근간을 이루지만, 동시에 치명적인 보안 취약점을 유발할 수 있습니다. 💻
- C에서는
malloc으로 메모리를 할당하고 free로 해제하는 수동 메모리 관리가 필수적이며, 이는 강력하지만 수많은 오류의 원인이 됩니다. 🧠
- 버퍼 오버플로우: C는 자동 경계 검사를 수행하지 않아, 할당된 버퍼 크기를 초과하는 데이터를 쓸 경우 스택의 반환 주소를 덮어쓰는 등 임의 코드 실행으로 이어질 수 있습니다 (예: Morris 웜). 🐛
- 하트블리드 취약점: OpenSSL의 Heartbeat 확장 기능에서 실제 메시지 길이와 선언된 바이트 수를 검증하지 않아, 서버가 민감한 정보를 유출하게 만들었습니다 (예: 암호화 키, 비밀번호). 💔
- Use-After-Free: 메모리가 해제된 후에도 해당 메모리 주소를 가리키는 포인터가 남아있어 재사용될 경우, 공격자가 시스템 제어권을 탈취할 수 있습니다 (예: Internet Explorer 8). 👻
- Off-by-One 오류: 문자열 끝의 널 종료 문자를 고려하지 않아 발생하는 계산 착오는 또 다른 버퍼 오버플로우를 유발하며, 이는 치명적인 결과를 초래할 수 있습니다. 🔢
- Double Free: 동일한 메모리 영역을 두 번 해제하는 것은 정의되지 않은 동작을 일으키며, 프로그램 충돌, 오작동 또는 공격자가 임의의 메모리 값을 쓸 수 있게 만들 수 있습니다. 💥