이번 글의 세 문항은 공개 기출문제의 원문을 재현하지 않은 창작 문제다. 정답과 해설은 게시 시점에 확인한 IETF RFC Editor와 OWASP 공식 자료를 근거로 작성했다.

문제 1 — TLS 1.3 핸드셰이크의 역할

문제

TLS 1.3 핸드셰이크 프로토콜의 설명으로 가장 적절한 것은?

선택지

  1. 애플리케이션 데이터를 평문으로 전송하고 인증서만 파일로 보관한다.
  2. 통신 당사자를 인증하고 암호 알고리즘·파라미터를 협상하며 공유 키 자료를 설정한다.
  3. 데이터베이스 사용자의 권한을 자동으로 부여한다.
  4. 모든 클라이언트의 신원을 반드시 공개키 인증서로 인증한다.

정답

2번

해설

RFC 9846은 TLS 핸드셰이크를 통신 당사자 인증, 암호 알고리즘과 파라미터 협상, 공유 키 자료 설정을 수행하는 구성요소로 설명한다. 클라이언트 인증은 선택적일 수 있으므로 4번의 “반드시”는 틀리다. [1]

오답 포인트

TLS는 단순 암호화 포장이나 인증서 보관 기능이 아니다. 핸드셰이크와 레코드 프로토콜의 역할을 구분하고, 서버 인증과 클라이언트 인증의 필수 여부를 혼동하지 않아야 한다.

출처 또는 검증 근거

[1] RFC Editor, RFC 9846, The Transport Layer Security (TLS) Protocol Version 1.3, §1, https://www.rfc-editor.org/rfc/rfc9846

문제 2 — SQL 인젝션 방어

문제

사용자 입력을 SQL 조건값으로 사용하는 애플리케이션의 1차 방어로 가장 적절한 것은?

선택지

  1. 입력 문자열을 SQL 문장에 이어 붙인 뒤 특수문자 일부만 제거한다.
  2. 모든 입력을 관리자 권한의 데이터베이스 계정으로 실행한다.
  3. SQL 구조와 값을 분리하고 매개변수화된 쿼리로 값을 바인딩한다.
  4. 클라이언트 화면에서만 길이 검사를 수행하고 서버에는 원문을 전달한다.

정답

3번

해설

OWASP는 SQL 구조를 데이터 값과 분리하고 데이터베이스 API를 통해 값을 바인딩하는 준비된 문장(매개변수화 쿼리)을 권고한다. 바인딩된 값은 SQL 구문이 아니라 데이터로 처리되므로 입력이 쿼리의 의미를 바꾸는 것을 막는 핵심 방어가 된다. [2]

오답 포인트

수동 이스케이프는 SQL 방언과 설정에 의존하므로 매개변수 바인딩의 대체재로 보지 않는다. 매개변수화는 호출자의 업무 권한까지 결정하지 않으므로 인가와 최소권한도 별도로 적용해야 한다.

출처 또는 검증 근거

[2] OWASP, SQL Injection Prevention Cheat Sheet, Primary Defenses, https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html

문제 3 — 데이터베이스 계정 최소권한

문제

SQL 인젝션이 발생하더라도 피해 범위를 줄이기 위한 데이터베이스 계정 운영으로 옳은 것은?

선택지

  1. 애플리케이션 계정에 DBA 권한을 부여해 기능 오류를 없앤다.
  2. 읽기만 필요한 계정에도 모든 테이블의 삽입·수정·삭제 권한을 부여한다.
  3. 애플리케이션별 필요한 객체와 작업만 허용하고 불필요한 관리자 권한은 부여하지 않는다.
  4. 운영 편의를 위해 모든 웹 애플리케이션이 하나의 관리자 계정을 공유한다.

정답

3번

해설

OWASP는 매개변수화와 함께 데이터베이스 계정의 최소권한을 적용하여 성공한 SQL 인젝션의 잠재적 피해를 줄이라고 안내한다. 읽기 전용 애플리케이션에는 필요한 테이블 또는 뷰에 대한 읽기 권한만 부여하는 식으로 범위를 제한한다. [2]

오답 포인트

최소권한은 SQL 인젝션 자체를 예방하는 통제가 아니라 성공 이후의 피해를 제한하는 방어 심층화 통제다. 따라서 3번의 권한 축소만으로 매개변수화가 불필요해지는 것은 아니다.

출처 또는 검증 근거

[2] OWASP, SQL Injection Prevention Cheat Sheet, Hardening — Least Privilege, https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html