정보보안기사 | 애플리케이션보안 핵심 정리 (3-3편)

정보보안기사 | 애플리케이션보안 핵심 정리 (3-3편)

🖥️ 정보보안기사 | 애플리케이션보안 핵심 정리 (3-3편)

XXE · Blind/UNION SQL Injection · Directory Listing · Apache Order 지시자 · 웹서버 로그 분석 · FTP 보안 설정 · sendmail · DB 감사 로그 · DNSSEC 레코드 · Secure Coding 7가지 · Certificate Pinning까지
애플리케이션보안 마지막 편을 완벽 정리합니다.

#정보보안기사실기 #애플리케이션보안 #XXEInjection #BlindSQLInjection #DirectoryListing #Apache보안설정 #SecureCoding #CertificatePinning
← 3-1편
DNS·FTP·XSS·CSRF
← 3-2편
OWASP·DB보안·OAuth
📍 3-3편 (現)
XXE·로그분석·SecureCoding

1. SQL Injection 심화 — XXE · Blind · UNION · 주석 악용

🔧 현직자 실무 포인트

Blind SQL Injection은 응답 시간 차이(Time-based)나 참/거짓 응답 차이(Boolean-based)를 이용합니다. 자동화 도구 sqlmap이 이를 자동으로 수행합니다. UNION 인젝션은 컬럼 수 파악이 선행되어야 하므로 ORDER BY 절부터 시작합니다.

공격 유형원리 및 특징
XXE Injection
(XML External Entity)
악의적인 XML 외부 엔티티 선언 → 시스템 파일 접근(/etc/passwd 등) 또는 내부 서비스 요청. SSRF와 유사한 내부망 접근 가능
Blind SQL Injection쿼리 결과가 화면에 미출력 → 참(True)/거짓(False) 응답 차이로 DB 정보 한 글자씩 유추.
예: and 1=1 (True) vs and 1=2 (False) 조건 반응 확인
UNION SQL Injection① ORDER BY로 컬럼 수 파악 → ② UNION SELECT로 출력 위치 확인 → ③ database() 함수로 DB명 탈취 → ④ information_schema로 테이블·컬럼명 파악 → ⑤ 실제 데이터 탈취
MySQL 주석 # 악용# 이후는 주석 처리. 예: admin# 입력 시 패스워드 검증 구문 무력화 → 인증 우회. — 도 동일 효과

🎯 시험 출제 포인트

  • XXE = XML 외부 엔티티 악용 → 시스템 파일 탈취·내부 서비스 접근
  • Blind SQL Injection = 참/거짓 응답 차이로 데이터 한 글자씩 유추
  • UNION SQL Injection 절차: ORDER BY(컬럼 수) → UNION SELECT → database() → information_schema
  • MySQL 주석 # = 이후 구문 무력화 → 패스워드 검증 우회

2. 웹서버 취약점 — Directory Listing · FollowSymLinks · Path Traversal

파일 목록 노출

📂 Directory Listing

디렉터리 인덱싱 활성화 시 파일 목록 노출. Apache = Options Indexes 활성화 시 발생. 차단: Options -Indexes
심볼릭 링크 웹 루트 탈출

🔗 FollowSymLinks 취약점

Apache에서 FollowSymLinks 옵션 활성화 시 심볼릭 링크를 통해 웹 루트 외부 파일 접근 가능. 차단: Options 지시자에서 FollowSymLinks 제거
../ 경로 조작

📁 Path Traversal

../ (또는 %2f, %5c, %255c 인코딩) 사용 → 웹 루트 외부 시스템 파일 접근. Directory Traversal이라고도 함. 대응: 경로 파라미터 화이트리스트 검증
3종 웹서버 차단 설정

🛠️ 디렉터리 리스팅 차단

IIS = 디렉터리 검색 기능 체크 해제
Tomcat = web.xml에서 listings=false
Apache = httpd.conf에서 Options -Indexes

🎯 시험 출제 포인트

  • Directory Listing 원인: Apache Options Indexes 활성화
  • 차단: Options -Indexes / Tomcat: listings=false / IIS: 디렉터리 검색 해제
  • FollowSymLinks = 심볼릭 링크로 웹 루트 탈출 / Options 지시자에서 제거
  • Path Traversal = ../ 경로 조작 / %2f·%5c·%255c 인코딩 우회

3. Apache 보안 설정 — Order 지시자 · 액세스 로그 · IIS W3C 로그

🔧 현직자 실무 포인트

Apache Order 지시자는 방화벽 규칙처럼 순서가 매우 중요합니다. “Order Allow, Deny”는 기본적으로 모두 차단하고 Allow 예외를 적용하는 방식입니다. 액세스 로그 분석은 침해사고 대응 시 가장 먼저 확인하는 항목입니다.

Order 설정우선 적용의미
Order Allow, DenyDeny 우선Allow를 먼저 처리하되 최종적으로 Deny가 우선. 기본 차단 정책
Order Deny, AllowAllow 우선Deny를 먼저 처리하되 최종적으로 Allow가 우선. 기본 허용 정책
📋 Apache access_log 항목 순서 (Combined Log Format)

① 클라이언트 IP → ② 식별자(-) → ③ 인증 사용자(-) → ④ 요청 날짜·시간⑤ 요청 메서드·URL·HTTP 버전⑥ 응답 상태 코드 → ⑦ 응답 바이트 수 → ⑧ Referer URL⑨ User-Agent

Q IIS W3C 로그에서 웹서버 IP와 클라이언트 IP 순서는?

→ 날짜·시간 이후에 웹서버 IP가 먼저, 클라이언트 IP는 나중에 나옴 Apache access_log는 클라이언트 IP가 맨 앞. IIS W3C는 서버 IP가 먼저 — 시험에서 자주 혼동 포인트.

🎯 시험 출제 포인트

  • Order Allow, Deny → Deny 우선 / Order Deny, Allow → Allow 우선
  • “Order에서 뒤에 오는 항목이 우선 적용”이 핵심 원칙
  • Apache access_log: 클라이언트 IP가 맨 앞
  • IIS W3C 로그: 웹서버 IP 먼저, 클라이언트 IP 나중
  • access_log 9가지 항목 순서: IP → 날짜 → 요청(메서드·URL·HTTP버전) → 상태코드 → 바이트 → Referer → User-Agent

4. 파일 업로드 취약점 판단 · 평문 전송 취약점

Q 파일 업로드 취약점 판단 근거는?

→ Content-Type을 이미지로 위장하여 .php / .jsp 같은 서버 사이드 스크립트 파일이 정상 업로드되는 것 확장자 검증 없이 Content-Type만 검사하는 경우 우회 가능. 대응: MIME 타입 + 확장자 모두 화이트리스트 검증.

Q 데이터 평문 전송 취약점과 대응은?

→ ID·패스워드가 HTTP 평문으로 전송되는 취약점. 대응: SSL/TLS 적용 → HTTPS 암호화 통신

🎯 시험 출제 포인트

  • 파일 업로드 취약점 판단: Content-Type 위장으로 .php/.jsp 업로드 성공
  • 대응: 확장자 화이트리스트 + 웹 루트 외부 저장 + 실행 권한 제거
  • 평문 전송 대응: SSL/TLS → HTTPS

5. robots.txt 설정

Q robots.txt의 역할과 모든 로봇 전체 차단 설정은?

→ 검색 로봇의 크롤링 허용·차단 조건 명시 파일. 전체 차단: User-agent: * → Disallow: / robots.txt는 강제성이 없어 악의적 봇은 무시할 수 있음. 민감한 경로는 추가로 접근 제어 적용 필요.
# 모든 검색엔진의 모든 경로 차단
User-agent: *
Disallow: /

# 특정 봇만 특정 경로 차단
User-agent: Googlebot
Disallow: /admin/

🎯 시험 출제 포인트

  • robots.txt = 검색 로봇 크롤링 허용/차단 설정 파일
  • 전체 차단: User-agent: * / Disallow: /
  • 강제성 없음 → 보조 수단, 단독으로 보안 수단으로 사용 불가

6. FTP 보안 설정 — vsftpd · ProFTPD · 배너 변경

FTP 데몬설정 파일주요 보안 설정
vsftpdvsftpd.confanonymous_enable=NO (Anonymous 차단)
ftpd_banner=메시지 (배너 변경)
ProFTPDproftpd.confRootLogin off (root 원격 접속 차단) 후 서비스 재시작
Telnet 배너/etc/issue.net기본값에 OS 버전·커널 정보 노출 → 내용 변경 필요

🎯 시험 출제 포인트

  • vsftpd Anonymous 차단: vsftpd.conf → anonymous_enable=NO
  • vsftpd 배너 변경: vsftpd.conf → ftpd_banner=메시지
  • ProFTPD root 원격 차단: proftpd.conf → RootLogin off
  • Telnet 배너: /etc/issue.net 파일에서 설정

7. sendmail 보안 설정 — access 파일 4종 키워드

키워드동작특징
OK무조건 허용RBL에 등록된 IP도 허용
RELAY메일 릴레이 허용해당 도메인/IP에서 오는 메일 중계 허용
REJECT거부 + 거부 메시지 전송발신자에게 반송 메시지 발송
DISCARD폐기 + 메시지 미전송조용히 폐기 (발신자에게 알림 없음)

Q sendmail access 파일 수정 후 DB 변환 명령어는?

→ makemap 명령어로 텍스트 access 파일 → sendmail이 인식하는 DB 파일로 변환 예: makemap hash /etc/mail/access < /etc/mail/access

🎯 시험 출제 포인트

  • sendmail access 4종: OK=허용 / RELAY=릴레이허용 / REJECT=거부+메시지전송 / DISCARD=조용히 폐기
  • REJECT vs DISCARD 차이: REJECT는 반송 메시지 발송, DISCARD는 메시지 없이 폐기
  • access 파일 변환 명령: makemap

8. Oracle DB 감사 로그 (audit_trail) · DBA 권한 최소화

audit_trail 값설명
NONE감사 기능 비활성화
DB감사 로그를 SYS.AUD$ 테이블에 저장 (DB 내부)
OS감사 로그를 운영체제 파일에 저장 (DB 외부)

Q 감사 로그를 DB 외부에 저장하는 이유는?

→ DB 내부 저장 시 관리자·공격자가 로그 삭제·변조 가능. 외부 저장으로 무결성 확보 + 중앙 집중형 관리 + 이상 징후 탐지

Q DBA가 일반 사용자에게 부여하면 안 되는 권한 4가지는?

→ CREATE USER · DROP USER · DROP ANY TABLE · BACKUP ANY TABLE 최소 권한 원칙 적용. 일반 사용자는 자신의 테이블에 대한 SELECT·INSERT·UPDATE·DELETE 권한만 부여.

🎯 시험 출제 포인트

  • audit_trail: NONE=비활성화 / DB=SYS.AUD$ 테이블 / OS=운영체제 파일
  • 감사 로그 외부 저장 이유: 삭제·변조 방지 + 무결성 확보
  • DBA 전용 권한: CREATE USER · DROP USER · DROP ANY TABLE · BACKUP ANY TABLE

9. DNSSEC 추가 레코드 4종 · dig axfr · named.conf

DNSSEC 레코드역할
DNSKEYZone에 사용되는 공개키 데이터 저장
RRSIG리소스 레코드에 대한 전자서명 저장 (무결성·원천 인증)
DS부모 Zone에 하위 Zone의 보안 위임 정보 저장
NSEC / NSEC3도메인 부재 인증 (존재하지 않는 도메인에 대한 응답을 서명)

Q dig 명령어로 Zone Transfer를 요청하는 방법은?

→ dig axfr @네임서버IP 도메인명 axfr = Authoritative Zone Transfer. 슬레이브 서버가 마스터에서 Zone 파일 전체를 가져올 때 사용. 취약점 진단 시 악용 가능.

Q 마스터 DNS 단독 운영 시 Zone Transfer 완벽 차단 설정은?

→ named.conf의 zone 블록에서 allow-transfer { none; }; 설정 슬레이브 서버가 있을 때는 allow-transfer { 슬레이브서버IP; }; 로 특정 IP만 허용.

🎯 시험 출제 포인트

  • DNSSEC 4종: DNSKEY=공개키 / RRSIG=전자서명 / DS=보안 위임 / NSEC=부재 인증
  • dig Zone Transfer: dig axfr @서버IP 도메인명
  • Zone Transfer 완벽 차단: named.conf → allow-transfer { none; };

10. Secure Coding 7가지 · Certificate Pinning · PreparedStatement

🔧 현직자 실무 포인트

Secure Coding 7가지 유형은 행정안전부의 소프트웨어 개발 보안 가이드에서 정의한 분류입니다. Certificate Pinning은 모바일 앱 보안 점검 시 반드시 확인하는 항목으로, 미적용 시 Burp Suite로 MITM 공격이 가능합니다.

Secure Coding 7가지 유형

🔐 보안 취약점 분류

① 입력 데이터 검증 및 표현
② 보안 기능
③ 시간 및 상태
④ 에러 처리
⑤ 코드 오류
⑥ 캡슐화
⑦ API 오용
모바일 MITM 방지

📌 Certificate Pinning

모바일 앱에 신뢰할 서버 인증서를 미리 저장 → 통신 시 비교하여 일치 시에만 허용. MITM(중간자 공격) 방지. 미적용 시 Burp로 트래픽 가로채기 가능.

Q Java JDBC의 PreparedStatement에서 ? (물음표)의 역할은?

→ 사용자 입력값이 바인딩될 위치를 나타내는 바인딩 변수. 입력값이 SQL 명령이 아닌 데이터로만 처리 쿼리 구조를 미리 컴파일 후 ? 위치에 값만 대입. ‘ OR ‘1’=’1 같은 SQL 구문 삽입 시도를 문자열로만 처리하여 무력화.
// Prepared Statement 예시 (Java JDBC)
String sql = “SELECT * FROM users WHERE id=? AND pw=?”;
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, userId); // ? 바인딩 — SQL 명령 아닌 데이터로만 처리
ps.setString(2, password);
ResultSet rs = ps.executeQuery();

🎯 시험 출제 포인트

  • Secure Coding 7가지: 입력 검증·보안 기능·시간 상태·에러 처리·코드 오류·캡슐화·API 오용
  • Certificate Pinning = 미리 저장된 인증서와 비교 → MITM 방지
  • PreparedStatement ? = 바인딩 변수 / 입력값을 데이터로만 처리 → SQL Injection 방어

11. 📌 애플리케이션보안 3-1 ~ 3-3 전체 통합 최종 요약

🎯 절대 암기 포인트 — 3편 全 범위

  • DNS 질의 우선순위: DNS 캐시 → hosts.ics → hosts → DNS 서버
  • DNS 포트: UDP 53(조회) / TCP 53(존 전송)
  • 파밍 = hosts 파일 변조·DNS 스푸핑 / DNSSEC = 공개키 기반 무결성
  • Zone Transfer 차단: named.conf → allow-transfer { none; };
  • dig Zone Transfer: dig axfr @서버IP 도메인명
  • DNSSEC 4종: DNSKEY=공개키 / RRSIG=전자서명 / DS=보안위임 / NSEC=부재 인증
  • FTP Active=서버→클라이언트 / Passive=클라이언트→서버
  • TFTP = UDP 69 / -s 옵션 chroot / 인증 없음
  • ftpusers = FTP 접속 제한 계정 목록 / vsftpd: anonymous_enable=NO
  • ProFTPD root 차단: RootLogin off / Telnet 배너: /etc/issue.net
  • vsftpd 배너: ftpd_banner
  • SNMP: UDP 161 / Trap=UDP 162 / Community String=public/private 변경 필수
  • SNMPv3 = 인증+암호화 / v1·v2 = 평문 취약
  • SPF = DNS TXT 메일서버IP / DKIM = 이메일 디지털 서명
  • PGP = Web of Trust / Received 헤더 가장 아래 = 최초 발송 서버
  • sendmail access: OK=허용 / RELAY=릴레이 / REJECT=거부+메시지 / DISCARD=조용히 폐기
  • sendmail DB 변환: makemap
  • OWASP A01:2021 = Broken Access Control / A10:2021 = SSRF
  • SSRF = 서버를 통해 내부 네트워크 접근 / 방화벽 우회
  • XXE = XML 외부 엔티티 악용 → 시스템 파일 탈취
  • Blind SQL Injection = 참/거짓 응답으로 데이터 유추
  • UNION SQL Injection: ORDER BY → UNION SELECT → database() → information_schema
  • MySQL 주석 # = 이후 구문 무력화 → 인증 우회
  • SQL Injection 최우선 방어: Prepared Statement (? = 바인딩 변수)
  • Directory Listing 차단: Apache=Options -Indexes / Tomcat=listings=false / IIS=디렉터리 검색 해제
  • FollowSymLinks = 심볼릭 링크 취약점 → Options 지시자에서 제거
  • Path Traversal = ../ 경로 조작 / %2f·%5c 인코딩 우회
  • Apache Order: 뒤에 오는 항목이 우선 (Allow,Deny=Deny우선 / Deny,Allow=Allow우선)
  • Apache access_log: 클라이언트 IP가 맨 앞 / IIS W3C: 서버 IP 먼저
  • 파일 업로드 취약점 판단: Content-Type 위장으로 .php/.jsp 업로드 성공
  • robots.txt 전체 차단: User-agent: * / Disallow: /
  • Aggregation = 낮은 등급 조각 조합 → 기밀 유추 / Data Diddling = 원본 바꿔치기
  • DB DCL: GRANT=부여 / REVOKE=회수 / DENY=금지, DENY 우선
  • MySQL 외부 차단: skip-networking / TDE = DBMS 내장 암호화
  • Oracle audit_trail: NONE=비활성화 / DB=SYS.AUD$ 테이블 / OS=OS 파일
  • DBA 전용 권한: CREATE USER·DROP USER·DROP ANY TABLE·BACKUP ANY TABLE
  • SET 이중서명: 상점→결제정보 숨김 / 은행→주문정보 숨김
  • OAuth 2.0 = 제3자 앱에 접근 권한 위임
  • 세션 하이재킹 = 세션 ID 탈취 후 위장 / HttpOnly = JS 접근 차단 / Secure = HTTPS만 전송
  • CSP = 리소스 출처 제한·XSS 방어 / X-Frame-Options = Clickjacking 방지
  • ServerTokens Prod + ServerSignature Off = Apache 버전 정보 숨김
  • Secure Coding 7가지: 입력 검증·보안 기능·시간 상태·에러 처리·코드 오류·캡슐화·API 오용
  • Certificate Pinning = 미리 저장된 인증서와 비교 → MITM 방지
  • Input Validation=입력 형식 검사 / Output Encoding=출력 이스케이프 → XSS 방어
  • CSRF 방어: CSRF Token + Referer 검증 + SameSite 쿠키
  • Directory Traversal 판단: ../ 경로 파라미터로 임의 파일 다운로드 성공