주통기반-버퍼 오버플로우

황인환·2024년 8월 10일

정의

컴퓨터 프로그램이 데이터를 메모리에 저장할 때 할당된 메모리공간을 초과하여 데이터를 저장할때 발생하는 오류입니다.

위협

할당된 저장공간보다 더 큰 값의 입력이 가능하고 이로 인한 오류 발생시 의도되지 않은 정보 노출, 비인가 접근 및 사용, 악의적인 코드 유도등 위협이 있습니다.

TEST방법

로그인페이지, 로그인 후 정보변경페이지, 검색어 입력, 게시글작성, URL파라미터 값 등에서 대량의 (임의의)문자열 입력하여 에러 페이지나 오류가 발생하는지 점검합니다.

대상 & 판단기준 & 조치방법

내용
대상웹 어플리케이션 소스코드
판단기준양호-파라미터 값에 오류x / 취약-파라미터 값에 오류o
조치방법입력값 범위 제한/ 허용범위를 벗어나는 경우 에러페이지가 반환되지 않게 조치

한계

C,C++같은 저수준의 메모리를 관리하는 언어에서 발생하며 php같은 메모리관리가 자동적으로 이루어지는 언어에서는 발생하지 않습니다.

php의경우

버퍼오버플로우는 아니지만 한계를 넘는 파일 업로드로 DOS공격을 할 수 있습니다.
ex)

업로드 페이지

fileupload.html

<form action="" method="post" enctype="multipart/form-data">
    파일 선택: <input type="file" name="file">
    <input type="submit" value="업로드">
</form>

upload.php

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // 파일이 업로드되었는지 확인
    if (isset($_FILES['file'])) {
        // 파일 정보를 가져옴
        $file = $_FILES['file'];
        $fileSize = $file['size'];

        // 파일 크기 제한 없음 (이 부분이 문제)
        // 실제 버퍼 오버플로우는 아니지만, 큰 파일을 통해 서버에 과도한 부담을 줄 수 있음

        // 파일을 임시 위치에서 업로드 위치로 이동
        $uploadDir = 'uploads/';
        $uploadFile = $uploadDir . basename($file['name']);

        if (move_uploaded_file($file['tmp_name'], $uploadFile)) {
            echo "파일이 성공적으로 업로드되었습니다.";
        } else {
            echo "파일 업로드 중 오류가 발생했습니다.";
        }
    }
}
?>

개선방안

$maxFileSize = 10 * 1024 * 1024; // 10MB
if ($file['size'] > $maxFileSize) {
    die("파일이 너무 큽니다. 최대 10MB까지 업로드 가능합니다.");
}

0개의 댓글