웹 취약점 점검 항목(3편) / 21~30번 항목

지난 웹 취약점 점검 항목(2편)에서 작성된 11~20번 항목에 이어 이번 포스팅 글에서는 21번에서부터 30번 항목까지의 기술 포스팅을 작성하겠습니다.
이번이 마지막 포스팅 글입니다.

지난글:
웹 취약점 점검 항목(1편) / 1~10번 항목 | Tech Hyeonker
웹 취약점 점검 항목(2편) / 11~20번 항목 | Tech Hyeonker

* 근거: 주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드(2021)

목차

21. 프로세스 검증 누락(PV)

점검 내용:

프로세스 검증 누락은 시스템 내에서 중요한 프로세스나 작업의 검증 단계를 무시하거나 생략하는 것을 의미합니다. 이로 인해 신뢰할 수 없는 데이터나 동작이 시스템 내에 허용될 수 있으며, 이를 악용한 공격이 발생할 수 있습니다. 이러한 취약점을 점검하고 방어하는 것은 시스템의 신뢰성과 안정성을 확보하는 중요한 단계입니다.

점검 목적:

프로세스 검증 누락을 예방하여 시스템의 데이터 정확성과 안전성을 보호하고, 악의적인 공격이나 오작동으로부터 시스템을 보호합니다. 또한 시스템 내에서 중요한 작업과 프로세스의 검증을 강화하여 데이터의 무결성을 유지합니다.

보안위협:

프로세스 검증 누락으로 인해 다음과 같은 위험이 발생할 수 있습니다:

  1. 무결성 위협: 검증되지 않은 데이터나 작업이 시스템 내에서 사용되어 데이터의 무결성이 깨질 수 있습니다.
  2. 악의적인 공격: 검증되지 않은 입력을 악용하여 시스템 내에서 악의적인 동작을 유발할 수 있습니다.

대상:

시스템 내에서 중요한 작업, 프로세스, 데이터 검증 과정 등

판단기준:

양호 (Good):

  • 시스템 내 중요한 작업과 프로세스의 검증 단계가 충실히 수행되며, 데이터 무결성을 보장할 수 있는 경우.

취약 (Vulnerable):

  • 시스템 내 중요한 작업이나 프로세스의 검증 단계가 누락되거나 충분하지 않은 경우.

조치방법:

  1. 입력 검증 및 필터링: 시스템 내에서 입력 데이터를 검증하고 필터링하여 검증되지 않은 데이터의 사용을 방지합니다.
  2. 정책 및 규정 강화: 중요한 작업과 프로세스에 대한 검증 절차와 규정을 명확히 정의하고 시행합니다.
  3. 모의 검증: 중요한 작업과 프로세스의 검증을 모의하여 예상치 못한 문제를 사전에 파악하고 대비합니다.

예시 구문 (프로세스 검증 누락 취약점):

가정: 파일 업로드 시, 파일 확장자와 크기의 검증 단계가 누락된 경우를 가정합니다.

# 검증 단계가 누락된 파일 업로드
def upload_file(filename, data):
    save_path = f"/uploads/{filename}"
    with open(save_path, 'wb') as f:
        f.write(data)
    print(f"파일 업로드 완료: {filename}")

# 사용자 입력으로부터 파일 정보를 받아 파일 업로드 수행
user_input_filename = input("업로드할 파일 이름: ")
user_input_data = input("파일 데이터: ")
upload_file(user_input_filename, user_input_data)

예시 구문 (프로세스 검증 강화):

가정: 파일 업로드 시, 파일 확장자와 크기의 검증을 추가하여 안전한 업로드를 보장하는 경우를 가정합니다.

# 파일 업로드 검증 추가
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'doc'}
MAX_FILE_SIZE = 10 * 1024 * 1024  # 최대 10MB

def upload_file_safe(filename, data):
    if not is_allowed_extension(filename):
        print("허용되지 않은 파일 형식입니다.")
        return
    if len(data) > MAX_FILE_SIZE:
        print("파일 크기가 너무 큽니다.")
        return
    
    save_path = f"/uploads/{filename}"
    with open(save_path, 'wb') as f:
        f.write(data)
    print(f"안전한 파일 업로드 완료: {filename}")

def is_allowed_extension(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

# 사용자 입력으로부터 파일 정보를 받아 안전한 파일 업로드 수행
user_input_filename = input("안전하게 업로드할 파일 이름: ")
user_input_data = input("파일 데이터: ")
upload_file_safe(user_input_filename, user_input_data)

위의 예시 코드에서는 프로세스 검증 누락 취약점과 해당 취약점을 강화하는 방법을 상세히 설명하고 있습니다.

22. 파일 업로드(FU)

점검 내용:

파일 업로드 점검은 사용자가 시스템에 파일을 업로드할 때 발생할 수 있는 보안 취약점을 점검하는 것을 의미합니다. 이는 악의적인 파일 업로드를 통한 시스템 침입을 방지하고 사용자가 업로드한 파일의 무결성을 보장하는데 중요한 역할을 합니다.

점검 목적:

파일 업로드 점검은 다음과 같은 목적을 가집니다:

  1. 시스템 보호: 악성 파일 업로드로 인한 시스템 침입을 방지하고 시스템의 안전성을 보호합니다.
  2. 데이터 무결성 보장: 업로드된 파일이 유효하고 무결한지를 확인하여 데이터의 무결성을 보장합니다.

보안위협:

파일 업로드로 인해 다음과 같은 보안 위협이 발생할 수 있습니다:

  1. 악성 파일 업로드: 공격자가 악성 코드가 포함된 파일을 업로드하여 시스템 내에 침입하는 경우.
  2. 무효한 파일 업로드: 사용자가 무효한 파일을 업로드하여 시스템 동작에 문제를 일으킬 수 있는 경우.

대상:

파일 업로드 기능을 가진 모든 시스템 및 웹 애플리케이션.

판단기준:

양호 (Good):

  • 적절한 파일 유형 및 크기 제한이 설정되어 있고, 업로드된 파일의 검증과 처리가 정상적으로 이루어지는 경우.

취약 (Vulnerable):

  • 파일 유형 및 크기 제한이 부적절하게 설정되어 있거나, 업로드된 파일의 검증이 누락된 경우.

조치방법:

  1. 파일 확장자 및 크기 제한 설정: 허용되는 파일 확장자와 최대 파일 크기를 제한하여 악성 파일 업로드를 방지합니다.
  2. 파일 유효성 검사: 업로드된 파일의 내용과 형식을 검사하여 유효성을 확인합니다.
  3. 바이러스 스캔: 업로드된 파일을 바이러스 스캐너를 통해 검사하여 악성 코드를 차단합니다.

예시 구문 (파일 업로드 취약점):

가정: 웹 애플리케이션에서 파일 업로드 시 파일 확장자 검증이 누락된 경우를 가정합니다.

# 파일 업로드 함수 (확장자 검증 누락)
def upload_file(filename, data):
    save_path = f"/uploads/{filename}"
    with open(save_path, 'wb') as f:
        f.write(data)
    print(f"파일 업로드 완료: {filename}")

# 사용자 입력으로부터 파일 정보를 받아 파일 업로드 수행
user_input_filename = input("업로드할 파일 이름: ")
user_input_data = input("파일 데이터: ")
upload_file(user_input_filename, user_input_data)

예시 구문 (파일 업로드 방어):

가정: 웹 애플리케이션에서 파일 확장자 및 크기 제한을 설정하여 안전한 파일 업로드를 보장하는 경우를 가정합니다.

# 파일 업로드 함수 (안전한 업로드)
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'doc'}
MAX_FILE_SIZE = 10 * 1024 * 1024  # 최대 10MB

def upload_file_safe(filename, data):
    if not is_allowed_extension(filename):
        print("허용되지 않은 파일 형식입니다.")
        return
    if len(data) > MAX_FILE_SIZE:
        print("파일 크기가 너무 큽니다.")
        return
    
    save_path = f"/uploads/{filename}"
    with open(save_path, 'wb') as f:
        f.write(data)
    print(f"안전한 파일 업로드 완료: {filename}")

def is_allowed_extension(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

# 사용자 입력으로부터 파일 정보를 받아 안전한 파일 업로드 수행
user_input_filename = input("업로드할 파일 이름: ")
user_input_data = input("파일 데이터: ")
upload_file_safe(user_input_filename, user_input_data)

이와 같이 파일 업로드 점검 항목에 대해 상세한 내용을 제시하였습니다.

23. 파일 다운로드(FD)

점검 내용:

파일 다운로드 점검은 시스템 또는 웹 애플리케이션에서 파일 다운로드 기능을 사용할 때 발생할 수 있는 보안 취약점을 점검하는 것을 의미합니다. 이는 사용자가 무단으로 민감한 파일을 다운로드하거나 악의적인 파일을 전달 받는 것을 방지하고, 다운로드된 파일의 무결성과 안전성을 보장하는데 중요한 역할을 합니다.

점검 목적:

파일 다운로드 점검은 다음과 같은 목적을 가집니다:

  1. 사용자 보호: 사용자가 무단으로 민감한 파일을 다운로드하는 것을 방지하여 개인 정보를 보호합니다.
  2. 시스템 보안 강화: 악의적인 파일 다운로드를 통한 시스템 침입을 방지하고 시스템의 안전성을 강화합니다.

보안위협:

파일 다운로드로 인해 다음과 같은 보안 위협이 발생할 수 있습니다:

  1. 악성 파일 다운로드: 사용자가 악의적인 목적으로 악성 코드가 포함된 파일을 다운로드하는 경우.
  2. 무단 파일 다운로드: 사용자가 민감한 정보를 포함한 파일을 무단으로 다운로드하는 경우.

대상:

파일 다운로드 기능을 가진 모든 시스템 및 웹 애플리케이션.

판단기준:

양호 (Good):

  • 적절한 인증 및 권한 검사가 이루어져 있고, 다운로드된 파일의 무결성 검증이 정상적으로 이루어지는 경우.

취약 (Vulnerable):

  • 인증 및 권한 검사가 부족하게 설정되어 있거나, 다운로드된 파일의 무결성 검증이 누락된 경우.

조치방법:

  1. 인증 및 권한 검사: 파일 다운로드를 시도하는 사용자의 인증 및 권한을 검사하여 무단 다운로드를 방지합니다.
  2. 다운로드 파일 검증: 다운로드된 파일의 무결성을 검증하여 악성 파일 다운로드를 방지합니다.
  3. 보안 헤더 사용: 웹 애플리케이션에서 보안 헤더를 설정하여 브라우저에서 다운로드된 파일의 실행을 제한합니다.

예시 구문 (파일 다운로드 취약점):

가정: 웹 애플리케이션에서 파일 다운로드 취약점을 이용하여 서버 내 환경 설정 파일을 다운로드하는 경우를 가정합니다.

# 파일 다운로드 함수 (취약한 다운로드)
def download_file_vulnerable(file_id):
    file_path = f"/configs/{file_id}.conf"
    return open(file_path, 'rb').read()

# 사용자 입력으로부터 환경 설정 파일 ID를 받아 취약한 파일 다운로드 수행
user_input_file_id = input("다운로드할 환경 설정 파일 ID: ")
file_data = download_file_vulnerable(user_input_file_id)
print("파일 다운로드 완료")

예시 구문 (파일 다운로드 방어):

가정: 웹 애플리케이션에서 파일 다운로드 취약점을 방어하여 서버 내 환경 설정 파일을 안전하게 다운로드하는 경우를 가정합니다.

# 파일 다운로드 함수 (안전한 다운로드)
def download_file_safe(file_id, username):
    # 사용자 권한 확인 및 환경 설정 파일 경로 생성
    if check_user_permission(username):
        file_path = f"/configs/{file_id}.conf"
        return open(file_path, 'rb').read()
    else:
        return None

# 사용자 입력으로부터 환경 설정 파일 ID와 사용자명을 받아 안전한 파일 다운로드 수행
user_input_file_id = input("다운로드할 환경 설정 파일 ID: ")
user_input_username = input("사용자명: ")
file_data = download_file_safe(user_input_file_id, user_input_username)
if file_data:
    print("파일 다운로드 완료")
else:
    print("파일 다운로드 권한이 없습니다.")

24. 관리자 페이지 노출(AE)

점검 내용:

관리자 페이지 노출 점검은 시스템 내에서 관리자 페이지에 대한 충분한 접근 제어가 부족한 경우를 나타냅니다. 이로 인해 권한이 없는 사용자가 관리자 페이지에 접근하여 시스템을 악용할 수 있는 보안 취약점이 발생할 수 있습니다.

점검 목적:

관리자 페이지 노출 점검의 목적은 다음과 같습니다:

  1. 시스템 보안 강화: 관리자 페이지에 대한 접근을 적절하게 제어하여 시스템의 안전성을 보호합니다.
  2. 불법적인 액세스 방지: 권한 없는 사용자로부터 관리자 페이지에 대한 불법적인 액세스를 방지합니다.
  3. 데이터 노출 방지: 관리자 페이지에 저장된 중요한 정보들이 무단으로 노출되는 것을 방지합니다.

보안위협:

관리자 페이지 노출 점검으로 인해 다음과 같은 보안 위협이 발생할 수 있습니다:

  1. 무단 액세스: 권한이 없는 사용자가 관리자 페이지에 액세스하여 시스템 조작이 가능합니다.
  2. 데이터 유출: 민감한 정보들이 무단으로 접근되어 유출될 수 있습니다.
  3. 시스템 변조: 악의적인 사용자가 관리자 페이지를 이용하여 시스템을 변조할 수 있습니다.

대상:

시스템 내의 관리자 페이지

판단기준:

양호 (Good):

적절한 인증 및 접근 제어 메커니즘이 구축되어 있음

취약 (Vulnerable):

인증 없이 관리자 페이지에 접근 가능한 경우

조치방법:

강력한 인증 메커니즘 사용: 관리자 페이지 접근 시 강력한 사용자 인증을 요구합니다.

접근 제어 설정: 관리자 페이지에 대한 접근 권한을 필요한 사용자에게만 부여하고, 나머지는 차단합니다. 모니터링 및 로깅: 관리자 페이지 접근 및 활동을 모니터링하고 로그를 기록하여 불법적인 시도를 탐지합니다.

예시 구문 (관리자 페이지 노출 취약점):

가정: 웹 애플리케이션에서 관리자 페이지에 대한 접근이 적절하게 제어되는 경우를 가정합니다.

# 관리자 페이지 접근 함수
def access_admin_page(user):
    if user.is_admin:
        return "관리자 페이지에 접근 가능합니다."
    else:
        return "관리자 권한이 필요합니다."

# 사용자 인스턴스 생성
user = User("alice", is_admin=False)

# 관리자 페이지 접근 시도
result = access_admin_page(user)
print(result)

위의 예시 구문은 사용자가 관리자인지 여부에 따라 관리자 페이지에 접근 가능한지를 판단하는 과정을 보여주고 있습니다.

예시 구문 (관리자 페이지 접근 방어):

가정: 웹 애플리케이션에서 관리자 페이지에 대한 접근을 강력한 인증을 요구하는 방식으로 보호하는 경우를 가정합니다.

<!-- 관리자 페이지 접근을 위한 강력한 인증 -->
<form action="admin_login.php" method="post">
    <input type="text" name="username" placeholder="사용자명">
    <input type="password" name="password" placeholder="비밀번호">
    <button type="submit">로그인</button>
</form>

위의 예시 구문은 관리자 페이지에 접근하기 위해 강력한 사용자 인증을 요구하는 양식을 보여주고 있습니다. 사용자는 정확한 사용자명과 비밀번호를 입력하여만 관리자 페이지에 접근할 수 있습니다.

예시 구문 (관리자 페이지 접근 방어 – 특정 IP 허용):

가정: 웹 애플리케이션에서 관리자 페이지에 대한 접근을 특정 등록된 IP만 허용하는 방식으로 보호하는 경우를 가정합니다.

<!-- 관리자 페이지 접근을 위한 강력한 인증 및 특정 IP 허용 -->
<form action="admin_login.php" method="post">
    <input type="text" name="username" placeholder="사용자명">
    <input type="password" name="password" placeholder="비밀번호">
    <button type="submit">로그인</button>
</form>

<?php
// 관리자 페이지 접근 시 특정 IP 허용
$allowed_ip = array("192.168.0.1", "10.0.0.2");
$user_ip = $_SERVER['REMOTE_ADDR'];

if (in_array($user_ip, $allowed_ip)) {
    echo "허용된 IP로부터 관리자 페이지에 접근하셨습니다.";
} else {
    echo "접근이 거부되었습니다.";
}
?>

위의 예시 구문은 관리자 페이지에 접근하기 위해 강력한 사용자 인증을 요구하는 양식을 보여주고 있습니다.

또한 PHP 코드를 통해 특정 등록된 IP 주소만이 관리자 페이지에 접근할 수 있도록 허용하고 있습니다. 사용자가 제공한 IP 주소가 허용된 IP 목록에 포함되어 있을 경우에만 관리자 페이지에 접근이 허용됩니다.

25. 경로 추적(PT)

점검 내용:

경로 추적(Path Traversal)은 공격자가 웹 애플리케이션에서 파일 시스템 경로를 조작하여 서버의 파일들을 노출하거나 수정하는 공격입니다. 이로 인해 민감한 파일이 노출되거나 원치 않는 파일 수정이 가능해질 수 있습니다.

점검 목적:

  • 시스템의 파일 시스템 경로 조작 공격으로부터 보호
  • 민감한 파일의 노출 및 수정을 방지하여 시스템 보안 강화

보안위협:

  • 서버 내 파일 시스템 경로 노출 및 민감한 정보 노출
  • 불법적으로 파일 조작 및 수정

대상:

  • 웹 애플리케이션, 서버 시스템

판단기준:

양호 (Good):

  • 입력값의 필터링 및 검증을 통해 경로 추적 공격을 예방한 경우

취약 (Vulnerable):

  • 입력값의 필터링이나 검증이 부족하여 경로 추적 공격에 취약한 경우

조치방법:

  • 사용자 입력값의 필터링 및 검증: 입력값에 대한 제한된 문자열 검사를 통해 경로 추적 공격을 방어합니다.
  • 경로 제한 및 보안 설정: 서버의 파일 시스템 접근 권한을 최소한으로 설정하고, 웹 서버 설정에서 경로 접근 제한을 구현합니다.

예시 구문 (경로 추적 취약점):

가정: 웹 애플리케이션에서 파일 다운로드를 위한 경로를 입력받는 경우를 가정합니다.

<?php
$filename = $_GET['file'];
$file_path = "/var/www/uploads/" . $filename;
if (file_exists($file_path)) {
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=" . $filename);
    readfile($file_path);
} else {
    echo "파일을 찾을 수 없습니다.";
}
?>

위의 예시 코드는 파일 다운로드를 위해 사용자 입력값으로 받은 파일명을 사용하여 경로를 생성하는 코드입니다. 하지만 입력값의 검증 없이 사용하면 경로 추적 공격에 취약합니다.

예시 구문 (경로 추적 방어):

가정: 파일 다운로드 시 경로 추적 공격을 방어하기 위해 입력값 검증을 추가하는 경우를 가정합니다.

<?php
$filename = $_GET['file'];
$allowed_files = array("document.pdf", "image.jpg", "report.docx");
if (in_array($filename, $allowed_files)) {
    $file_path = "/var/www/uploads/" . $filename;
    if (file_exists($file_path)) {
        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename=" . $filename);
        readfile($file_path);
    } else {
        echo "파일을 찾을 수 없습니다.";
    }
} else {
    echo "유효한 파일명이 아닙니다.";
}
?>

위의 예시 코드에서는 사용자 입력값을 미리 지정된 허용된 파일명과 비교하여 경로를 생성하므로 경로 추적 공격에 대한 방어가 강화됩니다.

26. 위치 공개(PL)

점검 내용:

위치 공개 취약점은 예측 가능한 폴더나 파일명을 사용하여 사용자의 위치 정보가 노출되어 해커가 이를 악용하여 대상에 대한 정보 및 데이터에 접근하는 취약점을 나타냅니다.

점검 목적:

  • 사용자의 위치 정보 유출로부터 개인정보 및 데이터 보호 강화
  • 예측 가능한 폴더 및 파일명 사용으로 인한 보안 취약점 방지

보안위협:

  • 예측 가능한 경로 또는 파일명 노출로 인한 위치 정보 유출
  • 악의적인 공격자가 위치 정보를 악용하여 대상 정보 접근 시도

대상:

  • 웹 애플리케이션, 사용자 위치 정보를 처리하는 기능 및 모듈

판단기준:

양호 (Good):

  • 예측 가능한 경로나 파일명 노출 방지로 사용자의 위치 정보가 안전하게 처리됨

취약 (Vulnerable):

  • 예측 가능한 경로나 파일명을 통해 사용자의 위치 정보가 노출되는 경우

조치방법:

  • 무작위성 추가: 위치 정보를 저장할 때 예측 불가능한 값을 사용하여 경로 및 파일명을 생성합니다.
  • 접근 권한 제어: 위치 정보를 저장하는 폴더 및 파일에 대한 접근 권한을 엄격히 제어하여 외부 접근을 차단합니다.
  • 보안 강화: 취약한 예측 가능한 경로 및 파일명을 더욱 강화된 보안으로 대체합니다.

예시 구문 (위치 공개 취약점):

가정: 웹 애플리케이션에서 사용자의 위치 정보를 예측 가능한 파일명을 통해 노출하는 경우를 가정합니다.

<?php
$user_location = $_GET['location'];
$filename = "/public_html/locations/" . $user_location . ".txt";
$data = file_get_contents($filename);
echo "현재 위치 정보: " . $data;
?>

위의 예시 코드는 사용자의 위치 정보를 파일명으로 사용하여 해당 파일의 내용을 노출하는 코드입니다. 이로 인해 해커가 예측 가능한 파일명을 이용하여 위치 정보를 획득할 수 있습니다.

예시 구문 (위치 공개 방어):

가정: 위치 정보를 예측 불가능한 무작위 값과 접근 권한 제어로 보호하는 방어 조치를 추가한 경우를 가정합니다.

<?php
$user_location = $_GET['location'];
$random_value = generate_random_value(); // 예측 불가능한 값 생성
$filename = "/public_html/locations/" . $random_value . ".txt";
$data = file_get_contents($filename);
echo "현재 위치 정보: " . $data;
?>

위의 예시 코드에서는 예측 불가능한 값을 사용하여 위치 정보를 처리하고, 접근 권한을 엄격히 제어하여 외부 접근을 차단하는 방어 조치가 강화되었습니다.

27. 데이터 평문 전송(SN)

점검 내용:

데이터 평문 전송(Data Plain Text Transmission) 취약점은 민감한 정보나 개인정보를 암호화하지 않은 평문 상태로 전송하는 보안 결함을 의미합니다. 이로 인해 공격자가 네트워크 트래픽을 감청하여 민감한 데이터를 탈취하거나 변조할 수 있습니다.

점검 목적:

  • 민감한 정보나 개인정보의 안전한 전송 보장
  • 데이터 전송 중의 중간자 공격 방지

보안위협:

  • 민감한 정보가 암호화되지 않은 상태로 네트워크를 통해 전송되어 탈취 및 변조 위험
  • 중간자 공격에 취약하여 공격자가 데이터를 가로챌 수 있는 위협

대상:

  • 데이터 전송 기능 및 모듈, 웹 애플리케이션 등

판단기준:

양호 (Good):

  • 민감한 정보가 적절한 암호화 방식을 사용하여 안전하게 전송됨

취약 (Vulnerable):

  • 민감한 정보가 암호화되지 않은 상태로 전송되는 경우

조치방법:

  • 암호화 프로토콜 사용: SSL/TLS와 같은 암호화 프로토콜을 활용하여 데이터 전송 시 암호화합니다.
  • HTTPS 사용: 웹 애플리케이션에서는 HTTPS를 통해 암호화된 연결을 사용하여 데이터를 전송합니다.
  • 데이터 암호화: 민감한 정보를 전송하기 전에 데이터를 암호화하여 전송합니다.

예시 구문 (데이터 평문 전송 취약점):

가정: 로그인 정보가 암호화되지 않은 평문 상태로 전송되는 경우를 가정합니다.

<form action="http://example.com/login.php" method="post">
    <input type="text" name="username" placeholder="사용자명">
    <input type="password" name="password" placeholder="비밀번호">
    <button type="submit">로그인</button>
</form>

위의 예시 코드에서는 로그인 정보가 평문으로 전송되므로 공격자가 네트워크를 감청하여 사용자의 민감한 정보를 탈취할 수 있습니다.

예시 구문 (데이터 평문 전송 방어):

가정: HTTPS를 사용하여 데이터 전송을 암호화하는 방어 조치를 추가한 경우를 가정합니다.

<form action="https://example.com/login.php" method="post">
    <input type="text" name="username" placeholder="사용자명">
    <input type="password" name="password" placeholder="비밀번호">
    <button type="submit">로그인</button>
</form>

위의 예시 코드에서는 HTTPS 프로토콜을 사용하여 데이터 전송을 암호화하고 있어 공격자의 감청 시도를 방지하고 데이터의 기밀성을 유지합니다.

28. 쿠키 변조(CC)

점검 내용:

쿠키 변조 취약점은 공격자가 유효하지 않은 방법으로 쿠키 값을 조작하여 사용자의 세션 정보나 데이터를 변조하는 공격입니다. 이로 인해 인증 우회나 권한 상승과 같은 보안 문제가 발생할 수 있습니다.

점검 목적:

  • 사용자 세션 및 데이터의 무결성 보장
  • 인가된 사용자만 접근 가능한 리소스 보호

보안위협:

  • 공격자가 쿠키를 변조하여 인증 우회 또는 권한 상승 공격을 시도할 수 있음
  • 사용자의 세션 정보나 개인 데이터 노출 위험

대상:

  • 웹 애플리케이션, 사용자 세션 관리 기능 등

판단기준:

양호 (Good):

  • 적절한 쿠키 보안 메커니즘이 구현되어 있어 변조 공격을 방어함

취약 (Vulnerable):

  • 쿠키가 적절하게 보호되지 않아 공격자가 쿠키 값을 변조할 수 있는 경우

조치방법:

  • HttpOnly 쿠키 사용: HttpOnly 속성을 적용하여 JavaScript를 통한 쿠키 접근을 방지합니다.
  • 세션 관리 보강: 쿠키의 만료 기간 설정 및 세션 관리에 보안을 강화합니다.
  • 쿠키 값 암호화: 쿠키의 값을 암호화하여 변조 공격을 어렵게 만듭니다.

예시 구문 (쿠키 변조 취약점):

가정: 사용자의 세션을 관리하는 쿠키가 적절하게 보호되지 않은 경우를 가정합니다.

// 공격자가 사용자의 세션 쿠키 값을 변조하는 시나리오
document.cookie = "session_id=malicious_session_value";

위의 예시 코드에서는 공격자가 JavaScript를 통해 세션 쿠키 값을 조작하여 사용자의 세션을 변조할 수 있습니다.

예시 구문 (쿠키 변조 방어):

가정: HttpOnly 속성을 사용하여 쿠키 접근을 제한한 경우를 가정합니다.

Set-Cookie: session_id=valid_session_value; HttpOnly; Secure

Set-Cookie: session_id=valid_session_value; HttpOnly; Secure

추가 구문

// 사용자의 세션 쿠키를 변조하는 악의적인 코드 예시
document.cookie = "session_id=malicious_session_value";

// 변조된 세션 쿠키로 인증 우회를 시도하는 시나리오 예시
fetch("/admin/dashboard", {
  headers: {
    Cookie: "session_id=malicious_session_value"
  }
}).then(response => {
  if (response.status === 200) {
    // 공격자가 변조한 세션으로 인증 우회에 성공한 상황
    console.log("관리자 대시보드에 접근 성공");
  } else {
    console.log("접근 실패");
  }
});

위의 예시 코드에서는 공격자가 JavaScript를 사용하여 사용자의 세션 쿠키 값을 변조하고, 이를 이용해 관리자 페이지에 접근하려고 시도하는 상황을 나타냅니다.

이와 같은 공격으로 인해 공격자는 정상적인 인증 절차 없이 관리자 페이지에 접근할 수 있게 됩니다.

HTTP/1.1 200 OK
Set-Cookie: session_id=valid_session_value; HttpOnly; Secure

// 위의 예시 헤더는 쿠키에 HttpOnly와 Secure 속성을 적용하여 쿠키의 안전성을 강화한 상황을 나타냅니다.

위의 예시 헤더에서는 HTTP 응답 헤더에 HttpOnly와 Secure 속성을 적용하여 세션 쿠키의 안전성을 보장하고 있습니다. HttpOnly 속성은 JavaScript를 통한 쿠키 접근을 제한하고, Secure 속성은 안전한 HTTPS 연결에서만 쿠키를 전송하도록 설정합니다. 이를 통해 공격자의 쿠키 변조 시도를 어렵게 만듭니다.

이것으로 이번 포스팅 글에서는 21번부터 28번 웹 취약점 점검 항목에 따른 상세 개요와 판단기준, 점검 목적, 조치 방법, 예시 구문까지 알아보았습니다.
이것으로 KISA 웹 취약점 점검 항목에 대한 포스팅 글을 마치겠습니다.
감사합니다.

[Reference]
1. KISA 한국인터넷진흥원>지식플랫폼>법령·가이드라인>가이드라인>보안취약점 및 침해사고 대응
2. Guide to Web Application Penetration Testing — TechMagic

댓글 남기기