## 단답형 (각 3점, 총 36점)
1. 공격자가 자신의 TCP 윈도우 사이즈를 0으로 설정한 후 다수의 HTTP 패킷을 송신하여 웹서버가 정상적으로 응답하지 못하도록 만드는 공격 기법은?
2. 조직 네트워크에 침투한 후 오랜 기간 탐지를 회피하며 정보를 수집해 빼돌리는 고도의 지능형 표적 공격을 무엇이라고 하는가?
3. XML 조회를 위한 질의문 생성 시 사용되는 입력값과 조회 결과에 대한 검증이 미흡할 때 발생할 수 있는 취약점은?
4. 정보통신망법 기준으로 접근권한 부여, 변경, 말소 등의 기록을 최소 몇 년간 보관해야 하는가?
5. 다음 중 호스트 기반 IDS(HIDS)가 탐지할 수 있는 공격 유형은?
a) 버퍼 오버플로우 b) DDoS 공격 c) 포트 스캔 d) ARP 스푸핑
6. 공격자가 정상적인 네트워크 트래픽에 악성코드를 숨겨 전송하는 기법은?
7. 정보보호 관리체계(ISMS) 인증 의무대상자가 갖추어야 할 관리체계 항목의 개수는?
8. 개인정보의 안전성 확보조치 기준에 따라 개인정보처리시스템에 대한 접속 기록을 최소 몇 개월 이상 보관해야 하는가?
9. 다음 중 공개키 암호화 방식을 사용하는 알고리즘은?
a) AES b) DES c) RSA d) SEED
10. 네트워크 장비나 서버의 로그를 중앙에서 수집하고 분석하는 시스템을 무엇이라고 하는가?
11. 무선 네트워크에서 사용되는 WPA3 암호화 방식에서 도입된 새로운 키 교환 프로토콜의 이름은?
12. 블록체인 기술에서 거래의 유효성을 검증하고 새로운 블록을 생성하는 과정을 무엇이라고 하는가?
## 서술형 (각 12점, 총 48점)
1. XSS(Cross-Site Scripting) 공격의 유형 3가지를 나열하고, 각각에 대해 간단히 설명하시오.
2. TCP Half-open 스캔(SYN 스캔)의 동작 과정을 단계별로 설명하고, 이 스캔 방식의 장단점을 서술하시오.
3. 개인정보 유출 사고 발생 시 정보통신서비스 제공자가 취해야 할 조치사항을 5가지 이상 나열하고 설명하시오.
4. 공격자가 HTTP Request Smuggling 공격을 수행하는 방법과 이를 방지하기 위한 대응책을 3가지 이상 제시하시오.
## 실무형 (각 16점, 총 32점)
1. 다음은 리눅스 시스템의 로그인 관련 설정 파일인 /etc/login.defs의 일부입니다. 보안성 강화를 위해 수정이 필요한 항목을 찾아 적절한 값으로 변경하고, 그 이유를 설명하시오.
```
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
```
2. 웹 애플리케이션 개발 시 SQL 인젝션 공격을 방지하기 위한 안전한 코드 작성 방법에 대해 설명하고, 다음의 취약한 PHP 코드를 안전한 코드로 수정하시오.
```php
<?php
$id = $_GET['id'];
$query = "SELECT * FROM users WHERE id = $id";
$result = mysqli_query($conn, $query);
?>
```
## 단답형 (각 3점, 총 36점)
1. 답: Slowloris 공격
해설: Slowloris 공격은 HTTP 헤더를 매우 천천히 보내 웹서버의 연결을 장시간 유지하게 만드는 DoS 공격 기법입니다.
2. 답: APT (Advanced Persistent Threat)
해설: APT는 지능적이고 지속적인 위협으로, 특정 대상을 겨냥해 장기간에 걸쳐 은밀히 정보를 수집하고 유출하는 공격입니다.
3. 답: XML 인젝션 (XML Injection)
해설: XML 인젝션은 악의적인 XML 구문을 삽입하여 XML 파서를 속이거나 민감한 데이터에 접근하는 공격입니다.
4. 답: 3년
해설: 정보통신망법에 따라 접근권한의 부여, 변경, 말소 등에 대한 기록을 최소 3년간 보관해야 합니다.
5. 답: a) 버퍼 오버플로우
해설: HIDS는 호스트 시스템의 로그, 파일, 프로세스 등을 모니터링하므로 버퍼 오버플로우와 같은 시스템 레벨의 공격을 탐지할 수 있습니다.
6. 답: 스테가노그래피 (Steganography)
해설: 스테가노그래피는 데이터를 숨기는 기술로, 정상적인 파일이나 통신에 악성코드를 은닉하는 데 사용됩니다.
7. 답: 80개
해설: ISMS 인증 기준은 관리체계 수립 및 운영, 보호대책 요구사항 등 총 80개 통제항목으로 구성되어 있습니다.
8. 답: 6개월
해설: 개인정보의 안전성 확보조치 기준에 따라 개인정보처리시스템에 대한 접속 기록을 6개월 이상 보관해야 합니다.
9. 답: c) RSA
해설: RSA는 대표적인 공개키 암호화 알고리즘으로, 큰 소수의 곱셈 분해의 어려움을 이용합니다.
10. 답: SIEM (Security Information and Event Management)
해설: SIEM은 보안 정보와 이벤트를 중앙에서 수집, 분석, 모니터링하는 통합 보안관리 시스템입니다.
11. 답: SAE (Simultaneous Authentication of Equals)
해설: SAE는 WPA3에서 도입된 새로운 키 교환 프로토콜로, 기존의 4-way handshake를 대체합니다.
12. 답: 채굴 (Mining)
해설: 채굴은 블록체인에서 새로운 거래를 검증하고 블록을 생성하는 과정을 말합니다.
## 서술형 (각 12점, 총 48점)
1. XSS(Cross-Site Scripting) 공격의 유형 3가지와 설명:
a) 저장형 XSS: 악성 스크립트가 서버에 저장되어 다른 사용자가 해당 페이지에 접근할 때 실행됩니다.
b) 반사형 XSS: 악성 스크립트가 URL 등을 통해 서버로 전송되고, 즉시 사용자에게 반사되어 실행됩니다.
c) DOM 기반 XSS: 클라이언트 측 스크립트가 DOM을 동적으로 수정하여 악성 코드를 실행합니다.
2. TCP Half-open 스캔(SYN 스캔)의 동작 과정:
a) 공격자가 대상 포트로 SYN 패킷을 보냅니다.
b) 포트가 열려 있으면 서버는 SYN-ACK로 응답합니다.
c) 공격자는 RST 패킷을 보내 연결을 즉시 종료합니다.
장점: 로그에 기록되지 않아 탐지가 어렵고, 빠른 스캔이 가능합니다.
단점: 방화벽이나 IDS에 의해 차단될 수 있으며, 일부 시스템에서는 정확하지 않을 수 있습니다.
3. 개인정보 유출 사고 발생 시 조치사항:
a) 유출 원인 파악 및 추가 유출 방지를 위한 보안 조치 실시
b) 개인정보 보호책임자에게 즉시 보고
c) 정보주체에게 유출 사실 통지 (5일 이내)
d) 개인정보보호위원회 또는 한국인터넷진흥원(KISA)에 신고
e) 홈페이지 등을 통한 유출 사실 공지
f) 피해 확산 방지를 위한 대책 수립 및 시행
4. HTTP Request Smuggling 공격 방법과 대응책:
공격 방법:
- 프론트엔드와 백엔드 서버 간의 HTTP 요청 해석 차이를 이용
- Content-Length와 Transfer-Encoding 헤더를 조작하여 요청을 분할
대응책:
a) 일관된 HTTP 파싱 구현 사용
b) 프론트엔드에서 백엔드로 전달되는 요청의 정확한 길이 확인
c) HTTP/2 사용으로 취약점 원천 차단
d) 웹 애플리케이션 방화벽(WAF) 도입 및 설정
## 실무형 (각 16점, 총 32점)
1. /etc/login.defs 파일 수정:
수정 전:
```
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
```
수정 후:
```
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_MIN_LEN 12
PASS_WARN_AGE 14
```
해설:
- PASS_MAX_DAYS: 암호 최대 사용 기간을 90일로 제한하여 주기적인 암호 변경 유도
- PASS_MIN_DAYS: 최소 1일 이상 사용해야 변경 가능하도록 설정하여 빈번한 변경 방지
- PASS_MIN_LEN: 암호 최소 길이를 12자로 늘려 복잡성 향상
- PASS_WARN_AGE: 암호 만료 14일 전부터 경고하여 사용자가 충분히 준비할 수 있도록 함
2. SQL 인젝션 방지를 위한 안전한 코드:
취약한 코드:
```php
<?php
$id = $_GET['id'];
$query = "SELECT * FROM users WHERE id = $id";
$result = mysqli_query($conn, $query);
?>
```
안전한 코드:
```php
<?php
$id = $_GET['id'];
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();
?>
```
해설:
- Prepared Statement를 사용하여 쿼리와 데이터를 분리
- bind_param을 통해 입력값을 안전하게 처리
- 매개변수화된 쿼리로 SQL 인젝션 공격 방지
- 추가로 입력값 검증 및 이스케이프 처리를 권장
이상으로 정보보안기사 실기 모의고사의 답과 해설을 마칩니다. 실제 시험에서는 더 다양하고 복잡한 문제가 출제될 수 있으므로, 꾸준한 학습과 실습이 필요합니다. 최신 보안 동향과 기술에 대해서도 관심을 가지고 공부하시기 바랍니다.