네이버에서 '구글' 검색한 결과를 웹 디버거 Fiddler로 확인한 결과입니다.



HTTP Request

<웹 디버거 Fiddler로 확인한 HTTP Request - 1>

HTTP Requset 메세지는 3가지 섹션으로 나눠진다.

:Request Line, Message Header, Message Body

Request Line은 Method, URL, Version로 구성된다.

Message Header는 뒤에 :(콜론)이 있으며, 공백 다음에 정보를 나타낸다.

Message Body는 페이지의 정보나 페이지에 필요한 인자값이 들어간다. 


<웹 디버거 Fiddler로 확인한 HTTP Request - 2>

Message Header 부분과 Message Body 사이 개행(Newline)이 있다.

GET 방식은 Message Body를 필요로 하지 않기 때문에 Message Body에 값이 들어가지 않는다.


HTTP 전송 방식 : 웹 서버로부터 자료를 가져오는 기능을 하는 GET을 많이 사용한다.

요청된 URL : 클라이언트가 자룔르 요청하기 위해 보내는 인자 값 등 임의의 쿼리 문자열을 의미한다.

HTTP 버전 : HTTP 버전은 1.0과 1.1이고, 대부분의 브라우저는 초기 값으로 1.1을 쓴다.

Host : URL 주소에 나타난 호스트명을 자세하게 나타내기 위해 사용, 다양한 웹사이트가 하나의 서버 안에서 호스트 됐을 때 필요

Referer : 해당 요청이 이전에 어디에서부터 요청을 받았는지에 대한 URL을 나타낸다.

User-Agent : 브라우저나 기타 클라이언트의 소프트웨어 정보를 보여 준다.

Cookie: 서버가 클라이언트에게 전송한 인자 값에 추가 정보를 보낼 때 사용한다.


 HTTP 전송 방식

 GET

 요청된 URL

 https:www.google.co.kr

 HTTP 버전

 1.1

 Host

 www.google.co.kr

 Referer

 https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EA%B5%AC%EA%B8%80

 User-Agent

 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36

 Cookie

NID=102=eoHhwtYHqeKffKHpfHLB4V9oKLb7ytEXZ5VtZZijiODOV6atPXvXzgB7-6BvupLYhpHXqMwBYyx0EpsTMxR_UTZOpEl1EKiz_DQdhsBSZOy3O4b5Qok7AcF7u4pgWIuV


HTTP Response


<웹 디버거 Fiddler로 확인한 HTTP Response - 1>

HTTP Response 메세지도 마찬가지로 3가지 섹션으로 구분된다.

:Response Line, Message Header, Message Body

Response LiIne은 Version, Status Code, Status Phrases로 구성된다.


<웹 디버거 Fiddler로 확인한 HTTP Response - 2>



HTTP 버전 : 1.0 or 1.1 주로 1.1

요청에 대한 상태 코드 : '200'이 표시되면 요청이 성공적으로 이뤄졌고 요청한 자료가 클라이언트에게 보내졌다는 것을 뜻한다.

응답에 대한 상황을 설명해 주는 문자열 : 정상적으로 페이지가 전달됐기 때문에 OK라는 값을 보내준다.

Server : 웹 서버의 소프트웨어 정보를 제공하며, 가끔 설치 되어 있는 모듈과 운영체제에 대한 정보를 포함하기도 한다.

Set-Cookie : 브라우저에게 쿠키에 대한 정보를 알려준다. 클라이언트가 서버에게 페이지 요청 시 쿠키 형태로 사용된다.

Pragma : 브라우저가 응답한 내용을 캐시에 저장되지 않게 한다.

Expries : 응답한 내용이 만기가 되면 캐시에 저장되지 않게 한다.

Content-Length : Message Body 길이를 바이트 단위로 나타낸다.


 HTTP 버전 

 1.1

 요청에 대한 상태 코드

 '200' 은 성공, 정상적으로 처리했음을 의미

 응답에 대한 상황을 설명해 주는 문자열 

 OK

 Server

 gws(Google Web Server)

 Set-Cookie

 NID=102=PKKPgu1-Hwq6xBlWqA7yagsl6isF7ted3q7Gs1IWooDTAcyBwNA59rrW5SeLONOBOGDw4PyD8FzWa5YTC4vF8k3Pp0ofxqPS9LMX-nPZ7NbMDv6g9OD6dgdQtiH-08K8; expires=Sun, 05-Nov-2017 03:56:42 GMT; path=/; domain=.google.co.kr; HttpOnly

 Pragma

 ·

 Expires

 '-1' 캐시에 저장되지 못하게 한다.

 Content-Length

 214100 



'보안서적 > 웹 해킹&보안 완벽 가이드' 카테고리의 다른 글

핵심 방어 메커니즘  (0) 2017.04.23
용어정리  (0) 2017.04.21

핵심 방어 메커니즘


- 권한 없는 사용자, 데이터와 기능에 대한 사용자 접근 처리

- 의도하지 않은 행동을 유발하는 사용자 입력 값 처리

공격자에 대한 처리

실시간 모니터링 기능을 사용한 애플리케이션 관리




사용자 접근 처리


웹 애플리케이션 통제 3가지 보안 메커니즘

인증

세션관리

접근통제


인증

: 사용자가 자기 자신에 대해 어떤 사용자라고 주장하는 사실을 확인하는 것이다.

: 로그인 프로세스가 기본적으로 사용된다.

문제점

:다른 사용자의 아이디와 비밀번호를 추측하거나, 로직에 있는 결함을 악용함으로써 인증 과정을 우회할 가능성이 있다.


세션 관리
:인가된 사용자의 세션을 효과적으로 관리하는 것이다.

:애플리케이션은 각 사용자를 위한 세션을 만들어 주거나 사용자에게 세션을 확인하게 하는 토큰을 발행한다.

:세션은 서버에 할당되어 있는 데이터 집합의 구조이다.

:토큰은 애플리케이션이 세션에 나타내는 독특한 문자열이다.

:세션 토큰을 전송하는 표준 방법은 쿠키(Cookie)이다.

문제점

토큰에 대해 매우 의존도가 높기 때문에 공격자의 입장에서는 다른 사용자에게 발행한 토큰에 대해 집중적으로 공격이 이뤄지는 경향이 있다.


# 접근 통제

:애플리케이션에서 사용자의 요청이 허가되는지 아닌지 결정을 내리고 실행하는 것이다.

:항상 강력하게 설계되고, 다양한 요소를 고려해 구현해야 한다.

:사용자에 대한 식별을 통해 적절하게 수행되어야 한다.




사용자 입력 값 처리

:사용자가 입력한 값이 안전한 상태로 처리되어야 한다는 점

:공격자가 입력한 값을 안전한 방식으로 처리하는 것을 '입력 값 검증'이라 부른다.

:'입력 값 검증'은 공격자가 악의적으로 입력한 값에 대한 필수적인 방어 요소이다.


다양한 입력 값

:사용자가 입력한 값뿐만 아니라 브라우저를 통해 전달되는 다양한 데이터 항목을 받아들이기도 한다.


입력 값 조작에 대한 처리 방법

- 위험하다고 알려진 것들은 모두 차단

유효성 검증 메커니즘 : 블랙리스트(비효율적 방법)

:블랙리스트에 매칭되는 데이터를 차단하고 그 외의 값들은 허용한다.


문제점

:블랙리스트 기반 필터는 NULL 바이트 공격에 대한 취약점이 있다.

:차단된 표현식 전에 NULL 바이트를 입력하면 필터는 입력된 값들을 프로세스하지 않기 때문에 표현식을 인식하지 않는다.


- 안전하다고 알려진 것들은 모두 수용

유효성 검증 메커니즘 : 화이트리스트(효과적인 방법)

:화이트리스트에 일치하는 데이터를 허용하고 그 이외의 값은 차단한다.


문제점

사용자 입력 값을 제어하는 문제에 대해서는 완벽한 해결책은 아니다.


불순물 제거

:불안전한 문자를 안전한 상태로 바꾸는 것


경계 검증

:악의적인 입력 값으로부터 애플리케이션을 보호하기 위한 가장 효과적인 접근 방식


다단계 검증과 정규화

:입력 값의 한 부분이라도 수정이 일어나지 않을 때까지 계속 재귀적으로 불순물 제거 작업을 수행하는 것이다.




공격자 핸들링

:공격자가 공격을 실패하게 하기 위해 구현된 방법

- 에러 핸들링

- 감사 로그 관리

- 관리자에게 경고

- 공격에 대응


에러 핸들링

:시스템 기반 메시지나 디버깅 정보를 노출시켜서는 안 된다.

:대부분 웹 개발 언어는 try-catch 구문예외 검사를 통해 에러를 다룬다.

:서버에서 처리할 수 없는 에러를 특별한 정보가 없는 임의의 에러 메시지로 설정할 수 있다.


감사 로그 관리

:침해시도에 대한 조사가 이뤄질 때 조사에 우선시되는 요소

:각 이벤트의 시간과 요청이 들어온 곳의 IP 주소, 세션 토큰, 사용자의 계정 등을 기록

- 로그인 성공, 로그인 실패, 비밀번호 변경과 같은 인증 기능과 관련된 모든 이벤트

- 시용카드 결제와 자금 이체 같은 주요 거래

- 접근 통제 메커니즘에 의해 막혀진 접근 시도

- 잘 알려진 공격 문자열을 포함하고 있는 악의적인 의도를 명확하게 표시하는 요청


관리자에게 경고

경고 메커니즘

- 하나의 IP 주소나 한 명의 사용자로부터 비정상적으로 많은 양의 요청을 받은 경우

- 하나의 은행 계좌로부터 평소와 다르게 많은 돈이 인출된 경우

- 잘 알려진 공격 문자열을 포함하는 경우

- 일반 사용자들에게 숨겨진 데이터가 수정된 경우


공격에 대응

:비정상적인 작동을 유발시키는 입력 값을 차단 -> 필터를 우회하는 기법이 있기 때문에 취약점 존재

:공격자의 행동을 무력화하기 위한 자동 대응 조치 

ex) 요청에 점차적으로 늦게 대응, 공격자의 세션 종료시키고 다음 공격으로 이어지기 전에 로그인이나 다른 단계를 수행




애플리케이션 관리

:관리란 관리자에게 사용자 계정과 역할 관리, 감시와 감사 기능에 접근, 진단 작업 수행, 애플리케이션의 기능을 설정하는 방법 등 제공하는 애플리케이션 보안 메커니즘의 주요한 부분이다.

인증 메커니즘의 약점은 공격자가 전체 애플리케이션을 위험에 빠지게 할 수 있는 관리적인 접근 획득이 가능할 수 있다.

- 다수의 애플리케이션은 관리자 기능에 효과적인 접근 제어를 수행하지 않는다.
관리자 기능은 데이터를 표현하는 사항에 대한 기능을 포함 하는데 XSS 공격은 높은 수준의 권한을 가지고 있는 사용자 세션을 위협하기도 한다.
관리자 기능신뢰되는 사용자에 의해 사용된다고 생각되기 때문에 가끔 다른 기능성 검사보다 덜 엄격한 보안 검사를 받음으로 공격자가 관리자 기능을 탈취해 전체 서버를 장악 할수도 있다.


'보안서적 > 웹 해킹&보안 완벽 가이드' 카테고리의 다른 글

웹 애플리케이션 기술 -1  (0) 2017.05.02
용어정리  (0) 2017.04.21

HTTP(hypertext transfer protocol)

:웹 서버와 사용자의 웹 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약 프로토콜이다.

:비연결지향적 프로토콜


프론트엔드(Front-End)

:웹사이트 디자인이나 버튼 기능처럼 사용자가 바로 볼 수 있는 부분이다.

:HTML, CSS 등이 대표적인 프론트엔드 기술
 

백엔드(Back-End)

:사용자가 눈으로 볼 수 없는 뒷단 기술이다.
:서버단 기술이라 불리기도 한다. 
:DB, 서버를 다루는 부분이 벡엔드 기술

SSL(Secure Socket Layer)

:인터넷에서 데이터를 안전하게 전송하기 위한 인터넷 통신 규약이다.

:인터넷 프로토콜이 보안면에서 기밀성을 유지하지 못한다는 문제를 극복하기 위해 개발되었다.
:인터넷 상거래시 요구되는 개인 정보와 크레딧카드 정보의 보안 유지에 가장 많이 사용되고 있는 프로토콜이다.

서드파티(Third Party)

:다른 회사 제품에 이용되는 소프트웨어나 주변 기기를 개발하는 회사.


인증 실패

:로그인 메커니즘상의 다양한 취약점

:쉽게 추측이가능한 비밀번호 허용하는 취약점

:무차별 대입 공격을 허용하는 취약점

:인증 우회를 허용하는 취약점

접근 통제 실패

:민감한 데이터나 기능에 대해 불법적인 사용자의 접근을 제대로 통제하지 못하는것

:서버 내의 다른 사용자의 민감한 데이터를 열람하는 취약점
:서버 관리자용 업무를 수행할 수 있는 권한을 획득하는 취약점


SQL 인젝션(Structured Query Language Injection)
:SQL 입력문에 대한 필터링이 없을 경우, 공격자가 SQL문으로 해석될 수 있는 입력을 시도하여 DB에 접근 할 수 있는 보안 취약점

:DB에서 원하는 임의의 데이터를 가져오게 하는 취약점
:DB 서버에 원하는 명령을 수행하는 취약점


XSS(Cross Site Scripting)

:공격자가 대상 사이트의 다른 사용자로 도용 가능하게 하거나, 웹사이트에 방문하는 사용자들에게 악의적인 공격을 수행가능하게 하는 취약점
:공격자에 의해 작성된 스크립트가 다른 사용자에게 전달되는 것이다.


정보 누출

:애플리케이션이 내부에서 발생하는 에러 처리의 결함이나, 다른 비정상적인 기능으로 인해 민감한 정보를 공격자에게 누출함으로써 공격자가 공격을 위한 정보를 수집하는데 도움을 주는 취약점


CSRF(Cross Site Request Forgery)

:불특정 다수를 대상으로, 로그인된 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 하게 만드는 공격이다.

프로세스(Process)

:컴퓨터 내에서 실행중인 프로그램
:여러 분야에서 과정 또는 처리라는 뜻으로 사용


클라이언트(Client)

:사용자가 서버에 접속했을 때 클라이언트는 사용자 자신을 말한다.

:사용자의 컴퓨터를 가리키기도 한다.

:컴퓨터에서 동작하고 있는 프로그램이 될 수도 있다.


쿠키(Cookie)

:어떠한 웹 사이트에 방문할 때 생성되는 정보를 담은 임시 파일로 크기는 4KB 이하로 작다.

:인터넷 사용자의 정보를 사용자의 컴퓨터에 저장한다.

Session Cookie 

:웹 사이트를 탐색하는 동안, 사용자의 컴퓨터 메모리에만 존재하는 쿠키 

:웹 브라우저가 종료되거나 탭이 닫힐 때 쿠키 삭제된다.

Persistent Cookie

:사용자 컴퓨터에 파일로 저장되는 쿠키

:유효 기간이 있으며, 웹 사이트가 해당 사용자에 대한 정보를 추적하거나 기억할 수 있도록 한다.

Secure Cookie

:secure 속성이 사용되는 쿠키

:HTTPS를 통해 암호화 되어 서버로 전송된다.
HttpOnly Cookie

:HttpOnly 속성이 사용되는 쿠키

:HTTP or HTTPS를 통한 요청을 전송할 때만 사용된다.
Third-Party Cookie

:도메인 이외의 도메인에서 만들어진 쿠키

:웹 페이지 내의 광고를 통해 생성된다.


세션(Session)

:통신에서는 사용자 간 또는 컴퓨터 간의 활성화된 연결

:프로그램 사용과 관련해서는 한 응용프로그램이 시작해서 종료할 때까지의 시간

:사용자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹서버 접속을 종료하는 기간을 말하며, 

 웹서버에 사용자의 정보를 저장한다.


토큰(Token)

:데이터 통신에서는 송신권(송신 허가증)

:문자열에서 구분할 수 있는 단위

:애플리케이션이 세션에 나타내는 독특한 문자열


SMTP(Simple Mail Transfer Protocol)

:인터넷에서 전자우편을 보낼 때 이용하게 되는 표준 통신 규약이다.


SOAP(Simple Object Access Protocol)

:웹서비스를 실제로 이용하기 위한 객체 간의 통신 규약이다.

:인터넷을 통하여 웹서비스가 통신할 수 있게 하는 역할을 담당하는 기술


URL(Uniform Resource Locator)

:자원 위치 지정자

:자원을 검색할 때 사용한다.

URL 형식

프로토콜://호스트명[:포트 번호]/[경로/]파일명[?param=값]

http://terms.naver.com/entry.nhn?docId=3571733&cid=59088&categoryId=59096


REST(Representational State Transfer)

:분산 시스템에서 사용하는 아키텍처 스타일이며, 요청과 응답 내용에 시스템 자원의 현재 상태를 나타낸다.

:WWW, HTTP 프로토콜, URL 형식 등에서 사용하는 핵심 기술은 REST 아키텍처 스타일과 비슷하다.

'보안서적 > 웹 해킹&보안 완벽 가이드' 카테고리의 다른 글

웹 애플리케이션 기술 -1  (0) 2017.05.02
핵심 방어 메커니즘  (0) 2017.04.23

+ Recent posts