[2026 주요정보통신기반시설] C-03 제어시스템 계정 입력 시 비밀번호 마스킹 처리, 입력값 에러 발생 시 제공 정보 제한 수행

인증과정에서 사용자가 입력하는 비밀번호의 노출을 방지하도록 마스킹 처리를 하고, 그 외 HMI 등의 제어시스템 입력창 중 문자열 입력이 가능한 경우 허용된 범위(예시: 문자 유형, 길이 등)의 값만 입력되도록하고,허용된범위를초과하는비정상적인값이입력시오류화면등발생여부점검

C-03 제어시스템 계정 입력 시 비밀번호 마스킹 처리, 입력값 에러 발생 시 제공 정보 제한 수행

가이드라인 원문

항목내용
항목코드C-03
점검내용인증과정에서 사용자가 입력하는 비밀번호의 노출을 방지하도록 마스킹 처리를 하고, 그 외 HMI 등의 제어시스템 입력창 중 문자열 입력이 가능한 경우 허용된 범위(예시: 문자 유형, 길이 등)의 값만 입력되도록하고,허용된범위를초과하는비정상적인값이입력시오류화면등발생여부점검
점검대상제어시스템구성요소전체
판단기준양호: 비밀번호 입력 시 마스킹 처리를 하고 있으며, 허용된 범위를 초과하는 값을 입력해도 불필요한 민감정보등이노출되지않는경우
판단기준취약: 비밀번호 입력 시 비밀번호가 노출되고 있거나, 허용된 범위를 초과하는 값을 입력하는 경우 불필요한정보가노출되는오류화면이나타나는경우
조치방법비밀번호 입력 시 반드시 마스킹 처리를 하도록 하고, 모든 사용자 입력과정에서 허용된 범위의 값만이 입력되도록 하고 비정상적인 값이 입력되더라도 불필요한 정보가 노출되는 오류 화면 등이 나타나지 않도록설정

상세 설명

개요

제어시스템의 사용자 인터페이스, 특히 HMI(휴먼머신인터페이스)는 운영자가 시스템과 상호작용하는 주된 창구입니다. 이 과정에서 비밀번호 노출 방지와 적절한 에러 메시지 처리는 보안의 핵심 요소입니다.

이 항목은 크게 두 가지 보안 조치를 다룹니다:

  1. 비밀번호 마스킹: 입력되는 비밀번호가 화면에 보이지 않도록 처리
  2. 안전한 에러 처리: 비정상 입력 시 시스템 정보가 노출되지 않도록 처리

필요성

1. 비밀번호 마스킹의 중요성

어깨너머 공격 방지 제어시스템 운영실에서는 여러 운영자가 근무하는 경우가 많습니다. 이때 비밀번호가 화면에 그대로 노출된다면, 옆에 있는 동료가 우연히 비밀번호를 보게 될 수 있습니다. 이를 어깨너머 공격(Shoulder Surfing)이라고 합니다.

내부자 위협 방지 내부자가 고위험자의 계정을 도용하여 시스템을 장악하는 것을 방지할 수 있습니다.

2. 안전한 에러 처리의 중요성

정보 노출 방지 상세한 에러 메시지는 공격자에게 시스템의 내부 구조, 데이터베이스 스키마, 사용 중인 기술 등 중요한 정보를 제공할 수 있습니다.

예를 들어:

  • “데이터베이스 쿼리 오류: SELECT * FROM users WHERE id=” → 테이블 구조 노출
  • “SQL Server 오류: ’ 또는 1=1 –” → SQL 인젝션 취약점 노출
  • “C:\Program Files\ControlSystem\config.xml 파일을 찾을 수 없습니다” → 시스템 경로 노출

점검 방법

Step 1: 비밀번호 마스킹 확인

비밀번호 입력이 필요한 모든 제어시스템 구성요소에서 비밀번호 입력 시, 비밀번호가 마스킹 처리(●●● 또는 ****)되고 있는지 확인합니다.

올바른 예: ●●●●●●●● 또는 ******** 잘못된 예: password123 (평문 그대로 노출)

Step 2: 입력값 검증 확인

HMI 등의 소프트웨어에 운영자가 입력 가능한 입력창이 있는 경우, 다음과 같은 비정상적인 값을 입력했을 때 사전 정의된 결과가 나타나는지 확인합니다:

  1. 허용되지 않는 문자 유형 입력

    • 예: 숫자만 입력해야 하는 입력창에 문자나 특수문자를 입력
  2. 허용되지 않는 문자 길이 입력

    • 예: 보통 4개 문자만 입력하면 되나 8개 문자를 입력
  3. DB Query 수준 문자열 입력

    • 예: ' OR 1=1 --, admin' --
    • SQL 인젝션 공격 시도

조치 방법

1. 비밀번호 마스킹 구현

일반적인 구현 방법

  • 입력 필드 타입을 password로 지정
  • 입력된 문자는 * 또는 로 표시
  • 클립보드 복사 방지
  • 스크린샷 방지 (가능한 경우)

2. 입력값 검증 및 안전한 에러 처리

클라이언트 측 검증

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 예시: 숫자만 허용
if (!/^\d+$/.test(inputValue)) {
    alert("숫자만 입력 가능합니다.");
    return;
}

// 예시: 길이 제한
if (inputValue.length > 4) {
    alert("4자리 이하로 입력해주세요.");
    return;
}

서버 측 검증

  • 항상 서버에서도 입력값을 다시 검증해야 합니다
  • 화이트리스트 방식으로 허용된 문자만 허용
  • 블랙리스트 방식은 우회될 수 있으므로 권장하지 않습니다

안전한 에러 메시지

1
2
3
4
5
// 좋은 예
alert("입력값이 올바르지 않습니다. 관리자에게 문의하세요.");

// 나쁜 예
alert("users 테이블의 username 컬럼에서 데이터를 찾을 수 없습니다.");

주의사항

  1. 개발단계에서의 보안 고려

    • 이 취약점은 제어시스템을 개발, 납품하는 업체가 개발단계에서부터 보안 취약점이 최소화되도록 해야 합니다
    • 운영단계에서 확인된 취약점이 있다면 제품을 이용하는 회사, 기관 등에 해당 취약점이 조치된 업데이트 및 보안패치가 배포되도록 하는 것이 바람직합니다
  2. UI/UX와 보안의 균형

    • 보안을 위해 사용자 경험을 너무 저해하지 않도록 주의해야 합니다
    • 명확하지만 안전한 에러 메시지를 제공해야 합니다
  3. 정기적인 점검

    • 새로운 HMI 화면이나 입력 기능 추가 시 반드시 이 항목을 점검해야 합니다
  4. 테스트 환경에서의 검증

    • 실제 운영 환경에 적용 전에 테스트 환경에서 충분히 검증해야 합니다

결론

비밀번호 마스킹과 안전한 에러 처리는 소프트웨어 보안의 기본이면서도 가장 중요한 요소입니다. 제어시스템의 특성상 오작동이나 보안 침해가 큰 피해로 이어질 수 있으므로, 개발 단계부터 이러한 보안 고려사항을 반드시 적용해야 합니다.

Hugo로 만듦
JimmyStack 테마 사용 중