본문 바로가기
  • 코딩, 허쌤이 떠먹여 줄게
BackEnd/정보처리기사

정보처리기사 실기 — 09 소프트웨어 개발 보안 구축 정리

by 허쌤 2026. 4. 27.

정보처리기사 실기 — 09 소프트웨어 개발 보안 구축 정리

실기에서 “소프트웨어 개발 보안 구축/시큐어코딩”은 보통 소스코드 보안 약점(총 47개)7개 분류로 묶어 단답·서술로 출제됩니다. 아래는 시험용으로 개념 → 약점 분류 → 대표 공격/대응 순서로 압축 정리한 문서입니다.


1. 핵심 목표(시험용 한 줄)

  • 기밀성(Confidentiality): 인가되지 않은 열람 방지(암호화/접근통제)
  • 무결성(Integrity): 인가되지 않은 변경 방지(검증/서명/권한)
  • 가용성(Availability): 서비스 지속 제공(자원관리/DoS 대응)

2. 소스코드 보안 약점 47개 — 7개 분류(암기용)

시험에서는 “( )은/는 7개로 분류된다” 류로 자주 나옵니다.
분류명만 정확히 쓰고, 대표 예시 1~2개를 붙이면 득점이 안정적입니다.

분류(7) 요지(한 줄) 대표 예시(키워드)
입력데이터 검증 및 표현 외부 입력 검증/정규화 미흡 SQL Injection, XSS, CSRF, 경로 조작, OS 명령 삽입
보안기능 인증·인가·암호화 등 보안기능 구현 부실 부적절한 인가, 평문 저장/전송, 하드코드 비밀번호/키
시간 및 상태 동시성/상태 관리 오류 경쟁조건(TOCTOU), 종료되지 않는 반복/재귀
에러 처리 예외/오류 처리 부실로 정보 노출 오류 메시지 정보 노출, 예외 미처리
코드 오류 개발 실수로 취약점 유발 NPE, 초기화 누락, 자원 해제 오류
캡슐화 중요정보/기능 은닉 미흡 디버그 코드 잔존, private 데이터 노출
API 오용 취약/부적절한 API 사용 취약한 API 사용, DNS lookup 의존 보안결정

3. 분류별 “대표 취약점 → 방지 포인트” (실기 서술 템플릿)

3.1 입력데이터 검증 및 표현

  • SQL Injection
    • 원인: 문자열 결합으로 쿼리 생성, 입력값 검증 미흡
    • 대응: PreparedStatement/파라미터 바인딩, 화이트리스트 검증, 최소 권한 DB 계정
  • XSS
    • 원인: 출력 인코딩/필터링 미흡, 사용자 입력을 HTML에 그대로 반영
    • 대응: 출력 시점 인코딩(escape), CSP, 입력 정규화(필요 시)
  • CSRF
    • 원인: 사용자의 세션을 악용한 위조 요청 방어 미흡
    • 대응: CSRF 토큰, SameSite 쿠키, 중요 요청 재인증/재확인
  • 경로 조작(Directory Traversal) / 자원 삽입
    • 대응: 경로 화이트리스트, canonical path 비교, 업로드 파일명/확장자/MIME 검증
  • OS 명령어 삽입
    • 대응: 쉘 호출 최소화, API 기반 처리, 인자 분리/화이트리스트

3.2 보안기능

  • 인증(Authentication)
    • 대응: 강한 비밀번호 정책, 로그인 시도 제한(락/지연), MFA(가능 시)
  • 인가(Authorization)
    • 대응: “서버에서” 권한검사, 최소 권한, 객체/속성 수준 권한 분리
  • 암호화/키 관리
    • 대응: 검증된 알고리즘 사용, 충분한 키 길이, 키/비밀번호 하드코딩 금지, 키는 분리 보관 및 로테이션
  • 중요정보 저장/전송
    • 대응: 저장 시 암호화(필요 시), 전송은 TLS, 로그/에러에 민감정보 마스킹

3.3 시간 및 상태

  • 경쟁조건(TOCTOU)
    • 원인: 검사 시점과 사용 시점 사이에 상태가 바뀜
    • 대응: 원자적 처리(락/트랜잭션), 재검증, 안전한 파일 생성/권한 설정
  • 종료되지 않는 반복/재귀
    • 대응: 종료 조건 보장, 타임아웃/상한(최대 반복/깊이), 자원 사용량 제한

3.4 에러 처리

  • 오류 메시지 정보 노출
    • 대응: 사용자에게는 일반 메시지(추적 ID), 상세 스택트레이스는 내부 로그로 분리
  • 부적절한 예외 처리/오류 상황 대응 부재
    • 대응: 예외 유형별 처리, 실패 시 안전한 기본값(fail-safe), 자원 정리

3.5 코드 오류

  • Null Pointer 역참조 / 초기화되지 않은 변수
    • 대응: 입력/상태 null 체크, 초기화 규칙 확립, 방어적 코딩
  • 부적절한 자원 해제 / 해제된 자원 사용
    • 대응: 자원 생명주기 일관화(try-with-resources 등), 이중 해제 방지

3.6 캡슐화

  • 제거되지 않은 디버그 코드/시스템 정보 노출
    • 대응: 배포 전 디버그 제거, 민감정보 출력 금지, 접근제어자/은닉 강화
  • Private 데이터/배열의 외부 노출
    • 대응: 방어적 복사(불변/복사본 반환), 외부에서 내부 상태 직접 변경 불가하게 설계

3.7 API 오용

  • 취약한 API 사용
    • 대응: 안전한 대체 API 사용, 보안 권고/패치 적용, 의존성 취약점 점검
  • DNS lookup에 의존한 보안결정
    • 대응: DNS 결과만 신뢰하지 않기, 추가 검증(IP/인증서/서명 등), 네트워크 경계 통제

4. 실기 단답·서술 “자주 나오는 문장” 모음

  • “소스코드 보안 약점은 총 47개이며 7개 분류로 구분된다.”
  • “SQL 삽입 공격은 PreparedStatement 등 파라미터 바인딩으로 방지한다.”
  • “XSS는 출력 시점 인코딩(escape)으로 방지한다.”
  • “CSRF는 CSRF 토큰, SameSite 쿠키로 방지한다.”
  • “경쟁조건(TOCTOU)은 검사-사용 사이 상태 변경으로 발생하며 원자적 처리로 완화한다.”
  • “오류 메시지는 사용자에게 최소 정보만 제공하고 상세는 내부 로그로 관리한다.”

5. 빠른 체크리스트(시험 직전 2분)

  • 7개 분류명을 순서 상관 없이 정확히 쓸 수 있다
  • 입력검증 분류에서 SQLi/XSS/CSRF를 예로 들 수 있다
  • 보안기능 분류에서 인가/암호화/평문저장/하드코드를 예로 들 수 있다
  • 시간 및 상태에서 TOCTOU를 한 줄로 설명할 수 있다
  • 에러처리에서 오류 메시지 정보노출 대응을 말할 수 있다
  • API 오용에서 취약한 API 사용/DNS 의존 결정을 예로 들 수 있다