웹 해킹
Web Service
HTTP
Cookie & Session ID
구글해킹(Google Hacking)
Web 취약점
HTML
웹 서버에 HTML 문서를 저장하고 있다가 클라이언트가 요청하면 해당 페이지를 전송
클라이언트는 웹 페이지 해석 후 웹 브라우저로 나타냄
이를 정적인 웹 페이지라고 함
정적인 웹 페이지는 변화를 반영하거나 새로운 것을 추가하기에 많은 시간이 걸림
웹 페이지는 바꿀 수 있는 가능성이 매우 낮다는 것이 보안상 장점
CSS(Client Side Script)
웹 서비스에 사용되는 스크립트
클라이언트 측이 웹 부라우저에 의해 해석 및 적용
서버가 아닌 웹 브라우저에서 해석되어 화면에 적용
웹 서버의 부담을 줄이면서 다양한 기능을 수행할 수 있음
JavaScript(객체 지향 언어), VB Script(주로 ASP와 연동)
SSS(Server Side Script)
CSS에서 받아온 정보를 처리한느 역할
CSS에서 사용자가 어떠한 입력을 하게 되면 해당하는 정보를 SSS에서 처리하고 DB에 저장하거나 삭제
서버에 따라서 다른 언어를 사용하기 떄문에 동작하는 웹 플랫폼이 다르기 때문에 맞춰서 사용
Web Proxy
서버와 클라이언트의 양쪽 역할을 중계 프로그램
- 클라이언트의 Request를 서버에 전송
- 서버로부터의 Response를 클라이언트에 전송
캐시 서버(Cache Server)
- 프록시 서버의 하나로 캐싱 프록시로 분류
웹 프록시를 통한 취약점 분석
웹 클라이언트와 웹 서버간에 전달되는 모든 HTTP 패킷을 확인 및 수정 가능
웹의 구조 파악, 취약점 점검, 웹 해킹에는 웹 프록시 툴을 사용
HTTP
응용 계층 프로토콜
TCP 계열로 80번 포트 사용
WWW 상에서 HTML 문서를 주고 받는 프로토콜
웹 상에서 텍스트, 그래픽, 애니메이션을 보거나 사운드 재생 가능
클라이언트와 서버 사이에 이뤄지는 요청(request) / 응답 (response) 프로토콜
현재 인터넷에서 사용되는 HTTP 버전은 1.0과 1.1
무상태 프로토콜
HTTP Message Format
Request : 요청 Message (Client - > Server)
Response : 응답 Message (Server -> Client)
HTTP version
HTTP Requeset
POST /form/entry HTTP/1.1
: 메소드 URI 프로토콜 버전
요청헤더 : 클라이언트의 구성과 선호하는 문서 형식을 지정
Request Method 종류
서버에 임무를 부여하는 HTTP 메소드
HTTP Requeset : Get 방식
가장 일반적인 HTTP Request 형태
요청 데이터의 인수를 웹 브라우저의 URL로 전송함
Request URI로 식별된 리소스를 가져올 수 있도록 요구
클라이언트 -> 서버
너가 가지고 있는 것을 갖고 싶어
데이터가 주소 입력란에 표시되므로 최사한의 보안도 유지되지 않는 취약한 방식
HTTP Requeset : Post 방식
엔티티를 전송하기 위해 사용
GET으로도 엔티티를 전송할 수 있지만, 자주 사용하지 않고 일반적으로 POST를 사용
클라이언트 -> 서버
이 정보를 너에게 알려 줄게
URL에 요청 데이터를 기록하지 않고 HTTP 헤더에 데이터를 젆송
엔티티를 URL로 전송하지 않으므로 다른 사용자가 링크로 해당 페이지를 볼 수 없음
HTTP Requeset : PUT 방식
POST와 유사한 전송 구조를 가짐
파일을 전송하기 위해 사용
Request 중에 포함된 엔티티를 Request URI로 지정한 곳에 보존하도록 요구
홈페이지 변조에 많이 악용되고 있음
클라이언트 -> 서버
이 파일을 줄게
HTTP Requeset : PUT 방식
POST와 유사한 전송 구조를 가짐
파일을 전송하기 위해 사용
Request 중에 포함된 엔티티를 Request URI로 지정한 곳에 보존하도록 요구
홈페이지 변조에 많이 악용되고 있음
클라이언트 -> 서버
이 파일을 줄게
HTTP Requeset : Head 방식
GET 방식과 동일
서버 측 데이터를 검색하고 요청하는 데 사용
BODY가 없고 응답코드와 HEAD로만 응답
URI 유효성과 리소스 갱신 시간을 확인하는 목적을 사용
웹 서버 정보 확인, 헬스 체크, 버젼 확인, 최종 수정일자 확인 용도
클라이언트 -> 서버
그 정보를 알려줘 !
HTTP Response
클라이언트의 HTTP Request에 대한 응답 패킷
서버에서 쓰이는 프로토콜 버전, Request에 대한 실행 결과 코드, 간략한 실행 결과 설명문 (OK 등) 내용이 담겨 있음
추가 정보로 전달할 데이터 형식, 길이 등이 MIME 형식으로 표현되어 있으며 헤더 정보 뒤에는 실제 데이터 (HTML 또는 이미지 파일)가 전달
데이터 전달이 끝나면 서버 연결을 끊음
HTTP Response 주요 실행 결과 코드
HTTP Response 실행 결과 응답 코드
-HTTP Response : 2XX 성공(Success)
Request가 정상으로 처리되면 200K를 보냄
- HTTP Response : 204 No Content
Request를 정상적으로 처리했지만 돌려줄 리소스가 없음
Request를 받아서 처리하는데 성공했지만 Response에 엔티티 바디를 포함하지 않음
: 브라우저에서 Request를 보낸 후 204 Response를 수신했어도 표시되어있는 화면은 변하지 않음
클라이언트에 대해 새로운 정보를 보낼 필요가 없는 경우 사용
- HTTP Response : 3XX Redircetion
3XX Response는 Request가 정상적으로 처리를 종료하기 위해 브라우저측에서 특별한 처리를 수행해야 함을 나타냄
- HTTP Response : 301 Moved Permanetly
현재 URI가 최선의 경로가 아님(북마크를 변경 필요)
Request된 리소스에는 새로운 URI가 부여되어 있기 때문에 새로운 URI를 사용해야 한다는 것을 알림
북마크 하고 있는 경우 Location 헤더 필드에서 가리키고 있는 URI로 북마크 권고
- HTTP Response : 302 Found
URI는 잠시 다른 장소로 이동 시 해당 페이지도 이동 시줌
새로운 URI가 할당되어있기 때문에 그 URI를 사용하도록 권고
301과 비슷하지만 302는 일시적인 이동
- HTTP Response : 4XX 클라이언트 에러
HTTP 단점
평문(암호화 X) 통신이기 때문에 도청 가능
통신 상태를 확인하지 않기 때문에 위장 가능
완전성(정보 정확성)을 증명할 수 없기 때문에 변조 가능
HTTP + 암호화 + 인증 + 완전성 보호 = HTTPS
Cookie & Session ID
Cookie를 위한 헤더 필더
Cookie는 유저 식별과 상태 관리에 사용되고 있는 기능
- Set-Cookie : 상태 관리 개시를 위한 쿠키 정보
- Cookie : 서버에서 수신한 쿠키 정보
Set-Cookie
Set-Cookie : status-enable; expire=Tue,05 Jul 2020 07:26:31 GMT; Path=/; domaie=.test.com;
NAME=VALUE | 쿠키에 부여된 이름과 값 |
Expires=DATE | 쿠키 유효기간(지정되지 않은 경우 브라우저 닫을 떄 까지) |
Path = PATH | 쿠키 적용 대상이 도는 서버 상의 디렉터리 |
Domain = 도메인명 | 쿠키 적용 대상이 도는 도메인명(지정되지 않을 경우 쿠키를 생성한 서버의 도메인) |
Seccure | HTTPS로 통신하고 있는 경우에만 쿠키 송신 |
HttpOnly | 쿠키를 JAVAScript에서 액세스 하지 못하도록 제한 |
세션 ID
- 클라이언트가 웹서버에 요청하여 처음 접속하면 JSP(혹은 ASP) 엔진은
요청한 클라이언트에 대해 유일한 ID를 부여하는데 이ID를 세션이라 부름
- 사용자 PC에서 쿠키 값을 조작할 수 있다는 단점을 보안하기 위한 것
웹 애플리케이션 | 세션 ID 변수명 |
ns | ASPSESSIONID |
TOMCAT | JSESESSIONID |
PHP | PHPSESSIONID |
Cold Fusion | CFID, CFTOKEN |
기타 | JWSESSIONID, JServerSESSIONID, SESSIONID, SID, Session_ID |
웹의 주요 취약점
국제 웹 보안 표준 기구 (OWASP : The Open Web Application Secuity Project) 에서 각 분야별 상위 열 가지 주요 취약점을 발표
- 웹 애플리케이션 보안에 대한 정보를 공유하고 체계를 세우는 자발적인 온라인 정보 공유 사이트
- 2001년 12월 마크 커페이와 데니스 그로브스에 의해 탄생
- 2004년 'OWASP Top 10'이라는 웹 애플리케이션 상의 10대 주요 취약점 발표
- 우리나라는 2011년 1월 OWASP Korea Chapter 이사회가 조직되어 활동 전개
명령 삽입 취약점(Injection)
- 전송 받는 인수에 포함된, 특정 명령을 실행하는 코드를 적절히 필터링하지 못하면
삽입 공격에 대한 취약점이 발생
- 웹 서버에서 데이터베이스로 전송되는 SQL 쿼리에는 아이디, 패스워드, 검색어 등 여러 가지 인수가 사용됨
- SQL 삽입 공격은 이 인수에 추가 실행 코드를 넣는 것
SQL Injection Attack
인증 및 세션 관리 취약점
Broken Authentication and Session Management
웹 애플리케이션이 사용자에 대한 인증 및 세션 처리를 잘못했을 때 발생
1) 취약한 패스워드 설정
- 관리자 패스워드를 변경하는 인터페이스가 별도로 만들어져 있지 않아
사용자는 개발자가 처음 설정한 패스워드를 그대로 쓰는 경우가 많음
- 웹에서 admin/admin과 같이 취약한 패스워드를 자주 발견할 수 있음
내 패스워드 보안 안정성 확인하기
2) 사용자 데이터를 이용한 인증
- 웹 서버는 공격자가 새로운 페이지에 접근할 때 수신한 인증 허용 값을 전달받으면서 해당 세션이 유효한 인증인지 확인
- 공격자가 전달해주는 값(아이디 및 사용자 고유번호 등)을 이용해 해당 인증의 소유자 구분
- 공격자는 세션 인증 값은 그대로 사용하고 UserNo 값만 변경함으로써 다른 계정으로 로그인한 것처럼 웹 서비스를 이용할 수 있음
XSS 취약점 (Cross-Site Scripting)
- 공격자가 작성한 스크립트가 다른 사용자에게 전달되는 것
- 다른 사용자의 웹 브라우저 안에서 적절한 검증 없이 실행되므로 사용자 새션 탈취, 웹 사이트 변조, 악의적인 사이트로 사용자 이동시킬 수 있음
- 해당 웹 사이트를 방문하는 사용자를 공격하는 기법
- 해당 웹 사이트 방문자의 쿠키나 세션을 추출할 수 있고, 방문자를 악성 코드가 포함된 사이트로 리다이렉트 할 수도있음
CSRF(Cross Site Request Forgery)
- 특정 사용자를 대상으로 하지 않고, 불특정 다수를 대상으로 로그인된 사용자가 자신의 의지와는 무관하게
공격자가 의도한 행(수정, 삭제, 등록, 송금 등)를 하게 만드는 공격
- 요청 변조
: 공격자가 입력한 스크립트를 웹 사이트 방문자가 실행함으로써 해당 방문자의 권한으로 스크립트가 실행되도록 만드는 방식
취약한 접근 제어(Broken Access Control)
인증된 사용자가 수행할 수 있는 것에 대한 제한을 제대로 적용하지 않은 것을 의미
공격자는 이를 악용해 사용자 계정 접근, 중요 파일 보기, 사용자 데이터 수정, 접근 권한 변경 등과 같이 권한 없는 기능을 사용하거나 데이터에 접근할 수 있음
보안 설정 오류
애플리케이션을 설치할 때 생기는 기본 페이지를 삭제하지 않고 그냥 방치하거나 최신 보안 패치를 업데이트 하지 않는 경우에 발생
디렉터리 리스팅과 같은 애플리케이션 설정 오류도 포함
민감한 데이터 노출
신용카드 정보, 개인 식별 정보, 인증 정보와 같은 중요한 데이터를 제대로 보호하지 않을 때 발생
기능 수준의 접근 통제 누락
애플리케이션에서 각 기능에 접근하는 서버에 동이한 접근 통제 검사를 수행할 경우 적절한 확인을 하지않으면 공격자는 권한없이 요청 위조 가능
알려진 취약점이 있는 컴포넌트 사용
취약한 컴포넌트를 악용해 공격하면 데이터 손실이나 서버 장악 문제가 발생할 수 있음
검증되지 않은 리다이렉트 및 포워드
목적 페이지를 결정할 때 신뢰되지 않은 데이터를 사용하거나 해당 사이트에 대한 적절한 검증이 없을 경우 피싱 사이트나 악성 코드가 포함된 사이트로 리다이렉트하거나 권한 없는 페이지로의 접근을 위해 포워드를 사용할 수 있음
'보안' 카테고리의 다른 글
[보안] 2/19 강의정리 (SSL, TLS, SSL 패킷 분석) (0) | 2021.02.19 |
---|---|
[보안실습] Burf Suite, Cookie 지속적 인증, SQL Injection Attack, XSS Attack (0) | 2021.02.18 |
[보안] 2/16 강의정리 (Sniffer TCP Dump, ARP/ICMP 리다이렉트, 파밍, 피싱, IP 스푸핑, DNS 스푸핑, DoS/DDoS, 구글 해킹, 세션 하이재킹) (3) | 2021.02.16 |
[보안실습] Wireshark, fping (0) | 2021.02.16 |
[보안 실습] 정보 수집, 사이트 복제, 패스워드 크래킹 (0) | 2021.02.15 |
댓글