이번에도 슥슥

6. 파일 업로드
- 개요
- 실습
- 취약한 사이트 실습(APM 환경)
- 안전한 사이트 실습(APM 환경) 1단계
- 업로드 파일에 대한 파일 타입 검증
- 공격자에 의해 파일 타입 우회 가능 — 업로드 시 메시지의 파일 타입 업로드을 이미지 파일로 변조
- 안전한 사이트 실습(APM 환경) 2단계 — 파일 타입과 확장자 검증 모두 수행
- 안전한 사이트 실습(APM 환경) 3단계
- 웹 서버 설정을 통해 파일 업로드 디렉터리에 있는 서버 사이드 스크립트 파일이 실행되지 않도록 설정하거나 직접 URL 호출을 차단하도록 설정
- 파일 업로드 디렉터리에 대한 문서 타입을 제어하기 위해 아파치 설정 파일에 대한 Directory 섹션의 AloowOverried 지시자에 FileInfo 또는 All을 추가한 후 파일 업로드 디렉터리에 액세스 파일(.htaccess)을 생성
- FileMatch 지시자를 이용하여 .ph, .inc. .lib 등의 파일에 대한 직접 URL 호출을 차단하도록(Deny from all) 설정
- Addtype 지시자를 이용, 서버 사이드 스크립트 확장자를 가진 파일들에 대해 text/html로 MIME 타입을 재조정하여 업로드된 서버 사이드 스크립트가 실행되지 않도록 설정
- 웹 서버 설정을 통해 파일 업로드 디렉터리에 있는 서버 사이드 스크립트 파일이 실행되지 않도록 설정하거나 직접 URL 호출을 차단하도록 설정
- 안전한 사이트 실습(APM 환경) 4단계
- 업로드 파일에 대한 크기 검증
- 파일 크기를 제한하기 위해 아파치 설정 파일에 해당 Directory 섹션의 LimitRequestBody 지시자를 이용할 수 있음
- 취약점 판단 기준
- 대응책
- 업로드 파일에 대한 파일 타입 및 확장자 검증
- 전용 디렉터리 별도 생성 후 설정을 통해 디렉터리에 있는 서버 사이드 스크립트 파일이 실행되지 않도록 하거나 직접 URL 호출을 차단하도록 설정
- 업로드하는 파일의 개수나 크기에 제한 설정
7. 파일 다운로드 취약점
- 개요
- 실습
- 취약점 판단 기준 — 파일 다운로드가 가능한 페이지의 URL/파라미터를 조작하여 임의의 파일 다운로드가 가능할 경우 취약한 것으로 판단
- 대응책
- 사용자가 입력하는 파일 경로와 이름에 대해 허용하는 경로 이외의 디렉터리와 파일에 접근할 수 없도록 처리
- 사용자 입력값에 대해 파일 경로를 변경할 수 있는 문자열을 필터링하도록 웹 애플리케이션 소스 파일을 작성하고 필터링이 가능한 보안 장비를 운영 중이라면 필터링 정책 적용
8. 경로 추적 취약점
- 개요 — 웹 애플리케이션 루트 디렉터리를 벗어나 시스템의 주요 파일과 데이터에 접근
- 실습
- 취약점 판단 기준
- 대응책
- 사용자가 임의로 접근할 수 있는 최상위 디렉터리를 웹 루트 디렉터리로 설정하여 시스템 루트 디렉터리로 접근하지 못하도록 제한
- 유닉스/리눅스 — chroot 기능
- 윈도우 — 새로운 논리 드라이브를 만들고 해당 드라이브를 웹 애플리케이션 루트 디렉터리로 설정
- 사용자 입력값에 대해 경로를 조작할 수 있는 문자 필터링
- 사용자가 임의로 접근할 수 있는 최상위 디렉터리를 웹 루트 디렉터리로 설정하여 시스템 루트 디렉터리로 접근하지 못하도록 제한
9. 파일 삽입 취약점
- 개요 — 공격자가 악성 스크립트를 서버에 전달하여 해당 페이지를 통해 악성코드가 실행되도록 하는 취약점
- 실습
- 취약한 사이트 실습(APM 환경)
- 안전한 사이트 실습(APM 환경)
- php.ini 설정을 통한 원격 파일 접근 제한
- aloow_url_fopen = Off
- display_error = Off
- php.ini 설정을 통한 원격 파일 접근 제한
- 대응책
10. URL/파라미터 변조 취약점
- 개요 — 실행 경로에 대해 접근제어를 검사하지 않거나 불완전하게 구현하여 공격자가 URL/파라미터값을 조작하여 중요 정보에 접근 가능한 취약점
- 실습
- 취약점
- 대응책
- 웹 애플리케이션이 제공하는 정보와 기능을 역할에 따라 배분함으로써 사용자가 변경할 수 있는 데이터의 노출 최소화
- 파라미터 변조 여부를 검증 과정이 필요하며 중요한 정보가 있는 페이지는 재인증 적용
11. 불충분한 세션 관리 취약점
- 개요 — 웹 애플리케이션에서 사용자가 로그인할 때 매번 동일한 세션 ID를 발급하거나 세션 타임아웃을 너무 길게 설정했을 경우 공격자가 다른 사용자의 세션을 재사용하여 해당 사용자의 권한을 탈취할 수 있는 취약점
- 실습
- 취약한 사이트 실습(APM)
- 안전한 사이트 실습(APM 환경)
- php.ini를 통한 적적한 세션 타임아웃 설정
- httponly 속성 쿠키를 통한 보안
- secure 속성 쿠키를 통한 보안
- 취약점 판단 기준 — 세션 ID를 분석 및 변조하여 로그인 시도 시 로그인에 성공할 경우 해당 취약점이 존재하는 것으로 판단
- 대응책
- 로그인 시마다 임의의 값으로 세션 ID 발급
- 세션 타임아웃 설정을 통해 일정 시간 요청이 없으면 자동 로그아웃되도록 구현
12. 정보 누출 취약점
- 개요
- 실습
- 취약한 사이트 실습(APM 환경)
- 디폴트 에러 페이지에 의한 웹 서버 정보 노출
- 에러 메시지에 의한 웹 서버 정보 노출
- 안전한 사이트 실습(APM 환경)
- http.conf를 통해 사용자 정의 에러 페이지 설정
- php.ini를 통한 에러 메시지 차단 — display_errors = Off
- 취약한 사이트 실습(APM 환경)
13. 기타 웹 애플리케이션 취약점
- HTTP 응답 분할 취약점
- 개요
- 클라이언트의 HTTP 요청에 포함된 요청 파라미터값이 HTTP 응답 헤더에 포함되어 클라이언트에게 다시 전달될 때 파라미터값에 개행문자인 CR과 LF가 포함되어 있으면 HTTP 응답이 2개 이상으로 분리될 수 있음.
- 공격자가 개행문자를 이용하여 첫 번째 응답을 종료시키고 두 번째 응답에 악의적인 코드를 삽입하여 XSS 등의 공격을 수행할 수 있는 취약점
- 동작 방식
- 개요
- XEE 인젝션
- 개요
- 취약한 XML parser가 외부 개체를 참조하는 XML 데이터를 처리할 때 공격자가 삽입한 공격 구문이 포함된 외부 개체가 동작하여 서버 파일 접근, 불필요한 자원 사용, 인증 우회, 정보 노출 등이 발생할 수 있는 취약점
- XML 문서에는 DTD(문서 유형 선언)를 포함할 수 있으며 DTD는 XML 개체를 정의할 수 있음
- 시스템 중요 파일에 접근하는 외부 개체 정의 악용 예시 — 악의적으로 시스템 내부의 중요 파일에 대한 경로를 외부 개체로 정의하여 파일 내용을 참조할 수 있음
- URL을 통한 외부 개체 정의 악용 예시 — 악의적으로 서비스를 요청할 수 있는 URL 경로를 외부 개체로 정의하여 요청에 관한 결과를 참조할 수 있음
- XML 개체를 이용한 DoS 공격 악용 예시 — XML 내 하나의 개체가 다른 개체를 반복적으로 참조하도록 구성하여 해당 개체를 생성하는 과정에서 서버에 부하를 발생시키는 DoS 공격
- 대응책
- 웹 애플리케이션에서 사용하는 XML parser의 외부 개체 참조 기능을 사용하지 않도록 비활성화
- XML 문서 내 외부 개체를 사용하지 못하도록 외부 개체를 선언하는 DTD를 필터링
- 개요
- XPath/XQuery 인젝션 취약점
- 개요 — 데이터베이스와 연동된 웹 애플리케이션에서 XPath 및 XQuery 질의문에 대한 필터링이 제대로 이루어지지 않으면 공격자가 입력이 가능한 폼에 조작된 질의문을 삽입하여 인증 우회를 통해 인가되지 않은 데이터 열람 가능
- 대응책
- XPath, XQuery에 사용되는 외부 입력 데이터에 대해 특수문자 및 질의 예약 필터링 수행
- 스트링을 연결하는 형태로 구성하지 않고 파라미터화된 질의문 사용
- 악성 컨텐츠 취약점
- 개요 — 사용자 입력값에 대한 필터링이 이루어지지 않으면 공격자가 악성 컨텐츠를 삽입할 수 있으며, 악성 컨텐츠가 삽입된 페이지에 접속한 사용자는 악성코드 유포 사이트가 자동으로 호출되어 악성코드에 감염
- 대응책 — SQL Injection, XSS, 파일 업로드 등의 취약점 제거
- 불충분한 인증 및 인가 취약점
- 개요 — 개인정보 수정 페이지나 SSO와 같은 곳에서 사용자 인증이 미흡할 경우 공격자가 파라미터로 전달되는 값을 수정하여 사용자 도용 및 개인정보 노출 문제 발생
- 대응책
- 파라미터 변조를 통해 권한 없는 사용자의 인증/인가를 요청할 경우 로그인한 사용자의 아이디 정보를 세션에 저장하여 세션에 저장된 아이디 값과 전달된 파라미터 값을 비교하여 사용자 인증/인가할 수 있도록 함
- 세션을 통하여 변수를 저장 및 관리
- 취약한 패스워드 복구 취약점
- 개요
- 대응책
- 사용자를 식별하기 위한 수단 활용 시 그 사용자의 유일한 값 사용
- 사용자 본인 인증 메커니즘 구현 시 추측이 불가하게 구현하고 임시 패스워드 발급 시 안전한 난수 값 사용
- 자동화 공격 취약점
- 개요 — 공격자가 자동화 도구 및 봇을 활용하여 접근 시도를 반복하며 시스템 성능에 영향
- 대응책
- 일정 횟수 이상 로그인 시도 시 로그인 차단
- CAPTCHA 적용
- 데이터 평문 전송 취약점
- 개요
- 취약한 사이트 예
- 대응책
- 중요 데이터에 대해 송수신 시 암호화 적용
- 보안 서버 적용 — 중요 정보가 사용되는 구간에 암호화 통신 적용
- 쿠키 변조
- 개요
- 대응책 — 세션 방식을 사용하고, 쿠키가 필요한 경우 암호화 적용
14. 개발 보안 관리
- 개요
- 개발 보안 안내서
- 사용자에게 전달된 값을 재사용할 경우 신뢰해서는 안 된다.
- 최종 통제 메커니즘은 반드시 서버에서 수행되어야 한다.
- 클라이언트에게 중요 정보를 전달하지 않는다.
- 중요 정보 전송 시 POST 메서드 및 SSL(HTTPS)을 적용한다.
- 중요한 트랜젝션이 일어나는 프로세스에 사용자의 비밀번호를 재확인한다.
- 중요 정보를 보여주는 페이지는 캐시를 사용하지 못하도록 설정한다. — no-cache
- 적절한 방법으로 암호화한다.
- 각 언어에서 제공하는 보안 수단을 이해한 후 사용한다.
'정보보안기사' 카테고리의 다른 글
| [정보보안기사(실기)] SECTION 10 이메일 보안 (0) | 2026.06.08 |
|---|---|
| [정보보안기사(실기)] SECTION 09 웹 서버 취약점 (0) | 2026.06.07 |
| SECTION 08 웹 애플리케이션 취약점 (1) (1) | 2026.06.05 |
| [정보보안기사(실기)] SECTION 07 애플리케이션 학습 (0) | 2026.06.03 |
| [정보보안기사(실기)] SECTION 06 라우터 보안 (0) | 2026.05.31 |