1. 웹과 HTTP의 이해
웹의 이해
- 1989년 팀 버너스 리가 연구 목적의 프로젝트로 시작
- 프로젝트 당시 하이퍼텍스트 프로젝트라고 불림
- 수많은 보안 취약점이 내재되어 있어 해킹에 취약
HTTP 프로토콜
- 가장 많이 쓰이는 프로토콜

- 연결 과정
- 서버가 준비 상태
- 클라이언트는 읽고자 하는 문서를 서버에 요청
- 서버는 웹 문서 중에서 요청받은 것을 클라이언트에 전송
- 연결 끊음
HTTP Request
- GET 방식
- 가장 일반적인 HTTP Request 형태, 요청 데이터의 인수를 웹 브라우저의 URL로 전송
- 최소한의 보안도 유지되지 않는 취약한 방식
- POST 방식
- URL에 요청 데이터를 기록하지 않고 HTTP 헤더에 데이터 전송
- 다른 사용자가 링크로 해당 페이지 X
- 게시판의 경우 : 목록이나 글 보기 화면은 GET, 게시글 저장, 수정, 삭제는 POST
HTTP Response
- 클라이언트의 HTTP Request에 대한 응답 패킷
- 서버에 쓰이는 프로토콜 버전
- 추가 정보로 전달할 데이터 형식, 길이 등이 MIME 형식으로 표현
- 데이터 전달이 끝나면 서버 연결 X

2. 웹 서비스의 이해
프론트 엔드
- HTML
- 프론트 엔드 : 클라이언트, 즉 웹 브라우저에서 실행되는 프로그램 영역
- 서버에 HTML 문서를 저장하고 있다가 클라이언트가 특정 HTML 페이지를 요청하면 해당 문서 전송
- 정적인 웹 페이지
- 웹 브라우저와 웹 서버 사이에 전달되는 값을 변조하여 웹 서버 설정이나 로직을 바꾸는 웹 해킹에서 정적인 웹 페이지는 바꿀 수 있는 가능성이 매우 낮음
- CSS
- 동적인 웹 서비스를 제공하기 위해서 자바스크립트, 비주얼베이직 스크립트 등이 사용
- 현재 프론트 엔드를 담당하는 스크립트는 자바스크립트
- 웹 브라우저에서 해석되어 화면 적용, 웹 서버의 부담을 줄이면서도 다양한 기능 수행
백 엔드
- 웹 서비스를 제공하는데 필요한 REST API를 제공하는 영역
- ASP나 JSP와 같은 동적 페이지를 제공하는 스크립트를 SSS라고함
- 클라이언트에 구현된 기능에 필요한 인자를 전달받고, 이 인자에 따라 함수처럼 그에 대한 결과 전달
- 함수는 URL에 따라 구분, 그 결과는 JSON 형태로 클라이언트에 전달

HTTP 분석
- HTTP는 웹 페이지 송수신을 위하는 프로토콜
- 서버의 80번 포트로 확립된 소켓상에서 HTTP 요청과 HTTP 응답을 교환하여 네트워크 통신
- HTTP 패킷 분석
- HTTP 요청 메시지
- 패킷 리스트 영역의 Info 열에 GET/파일명 HTTP/1.1로 표시된 프레임이 HTTP 요청 메시지가 포함된 패킷
- 98번 패킷은 GET 메소드를 사용하여 HTTP1.1프로토콜로 style.css 페이지를 가져오라는 명령
- HTTP 요청 메시지
3. 웹 해킹
웹 취약점 스캐너를 통한 정보 수집
- 빠른 시간 내에 다양한 접속 시도를 수행할 수 있다는 것이 장점
- 실제 보안 문제가 있는 취약점이 아닌 경우도 많음
웹 프록시를 통한 취약점 분석
- 웹 구조 파악, 취약점 점검할 때 웹 프록시 툴 사용
- 클라이언트에 설치되고 클라이언트의 통제를 받음
- 클라이언트가 웹 서버와 웹 브라우저 간에 전달되는 모든 HTTP 패킷을 웹 프록시로 확인

- 웹 프록시 Burp Suite
- 설정
- LAN 설정에서는 주소와 포트의 두 가지 값을 넣음
구글 해킹을 통한 정보 수집
- 구글 같은 검색 엔진이 유용

- 주요 검색 인자
- site(’wishfree.com’ 도메인이 있는 페이지에서 ‘admin’ 문자열 검색)
- site:wishfree.com admin
- filetype(파일 확장자 txt, 문자열 password가 들어간 파일 검색)
- filetype:txt password
- Intitle(디렉터리 리스팅이 가능한 사이트 검색)
- intitle:index.of admin
- site(’wishfree.com’ 도메인이 있는 페이지에서 ‘admin’ 문자열 검색)
- 검색 엔진의 검색을 피하는 방법
- 가장 일반적 대응 방법 : robots.txt 파일을 만들어 검색할 수 없게 만듬
- http://wishfree.com/robots.txt 파일이 있으면 robots.txt에 있는 디렉토리 검색 X
- robots.txt 파일은 Useragent와 Disallow를 이용
- User-agent : googlebot(구글 검색 엔진의 검색 막음)
- User-agent : *(모든 검색 로봇의 검색을 막음)
- Disallow : dbconn.ini(dbconn.ini 파일 검색을 막음)
4. 웹의 취약점과 보안
웹의 주요 취약점
- 인증 및 세션 관리 취약점(A2, Broken Authentication and Session Management)
- 취약한 패스워드 설정
- 웹의 경우 사용자는 개발자가 설정한 패스워드 그대로 쓰는 경우 많음
- 취약한 패스워드 설정
- XSS 취약점(A3. Cross-site Scripting)
- XSS : 공격자가 작성한 스크립트가 다른 사용자에게 전달되는 것
- 다른 사용자의 웹 브라우저 안에서 적절한 검증 없이 실행 ,사용자 세션 탈취 변고하고 악의적 사이트로 이동
- XSS 공격수행→접근(피해자→웹서버) → 스크립트 전달(웹 서버→ 피해자) → 실행 →결과 값 전달(피해자→공격자)
- 구조
- 임의의 XSS 취약점이 존재하는 서버에 XSS 코드를 작성하여 저장
- 공격자가 작성해놓은 XSS 코드에 해당 웹 서비스 사용자가 접근
- 웹 서버는 사용자가 접근한 XSS 코드가 포함된 게시판의 글을 사용자에게 전달
- 사용자의 시스템에서 XSS 코드가 실행
- XSS 코드가 실행된 결과가 공격자에게 전달되고 공격자는 공격 종료
- 취약한 접근 제어(A4. Broken Access Control)
- 인증된 사용자가 수행할 수 있는 것에 대한 제한을 제대로 적용하지 않은 것을 의미
- 이 취약점 노출시 다른 사용자가 페이지 접근하여 관리자 권한 악용
- 인증 우회를 막으려면 웹의 중요 페이지에 세션 값을 확인하는 검증 로직을 입력
- 보안 설정 오류(A5. Security Misconfiguration)
- 디렉터리 리스팅
- 웹 브라우저에서 웹 서버의 특정 디렉터리를 열면 그 디렉터리에 있는 파일과 목록이 모두 나열되어 있는 것을 말함
- 상당수는 관리자가 설정 사항을 인지 X, 웹 서버 자체의 취약점 떄문에 발생
- 백업 및 임시 파일 존재
- 백업 파일을 통해 웹 어플리케이션 내부 로직, DB 접속 정보 획득 가능
- 예) login.asp의 백업 파일인 login.asp.bak 파일
- 미흡한 주석 관리
- 파일 업로드 제한 부재
- 디렉터리 리스팅
- 민감한 데이터 노출(A6, Sensitive Data Exposure)
- 데이터 중요도에 따라 암호화 로직 사용, 데이터베이스 테이블 단위에서 암호화 수행
- 공격 방어 취약점(A7, Insufficient Attack Protection)
- 웹 애플리케이션 수준에서 자동 탐지, 로깅, 응답 및 공격 시도 차단 포함 권고
- CSRF 취약점(A8, Cross-site Request Forgery)
- 취약점 있는 컴포넌트 사용(A9 ,Using Components with Known Vulnerabilities)
- 사용하려는 컴포넌트, 라이브러리 보안 취약점 검토
- 취약한 API(A10, Underprotected APIs)
- 검토 필요
웹의 취약점 보완
- 특수 문자 필터링
- 웹 해킹의 가장 기본적인 형태 중 하나는 인수 조작으로 예외적인 실행을 유발하기 위해 특수문자 포함
- 본문에 포함되는 특수 문자를 함수를 이용하여 제거 → XSS 취약점 공격 방어