일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 활성화함수파이썬
- 딥러닝
- c언어
- 파이썬
- 신경망파이썬
- BOJ
- 백준
- 알고리즘
- 소프트맥스함수
- C언어알고리즘
- C알고리즘
- 항등함수
- 인공지능
- FTZlevel10
- 신경망구현
- 머신러닝
- BOF
- C언어 알고리즘
- 버퍼오버플로우
- 딥러닝파이썬
- 8086CPU레지스터
- 밑바닥부터시작하는딥러닝
- 신경망 학습
- 보안
- 백준알고리즘
- 정보보안
- 스트림암호
- 신경망
- 달고나bof
- 파이썬신경망
- Today
- Total
HeeJ's
[00] 웹 해킹 기초 본문
주목할 만한 HTTP 헤더
웹 서버 -> 클라이언트 브라우저
Set-Cookie : 사용자의 세션이 유지되도록 보장하기 위해 가장 흔하게 클라이언트에 제공하는 세션 식별자(쿠키)
해커가 사용자 세션을 훔칠 수 있다면 공격자는 애플리케이션 내에서 해당 피해자인 척 가장할 수 있음
Content-Length : 응답문의 바이트 단위 길이
해커가 응용프로그램의 응답을 해독할 때 바이트 단위의 데이터를 예상할 수 있으므로 도움이 된다.
Brute-force 공격에 사용 가능
Location : 응용 프로그램이 사용자를 다른 페이지로 보낼 때 사용
애플리케이션에 성공적으로 인증한 후에만 접근 가능한 페이지를 가리킬수록 이용할 수 있기 때문에 해커에게 유용하다
클라이언트 브라우저 -> 웹 서버
Cookie : 하나 또는 여러개의 쿠키는 사용자의 세션을 유지하기 위해 헤더에 담겨 서버로 되돌려 보내진다.
헤더 값은 서버가 set-cookie로 발행한 헤더 값과 언제나 일치해야 함
응용프로그램의 유효한 세션 값을 제공하므로 다른 응용프로그램 사용자를 공격할 때 사용 가능
Referrer : 다른 웹 페이지를 요청할 때 이전에 열었던 페이지를 목록으로 만듦
"마지막으로 방문한 페이지"를 뜻하며, 쉽게 값을 변경할 수 있기 때문에 해커에게 유용
만일 응용 프로그램이 보안에 관한 어떤 것을 이 페이지에 의존한다면, 값을 변조하여 쉽게 우회 가능
주목할만한 HTTP 상태 코드
브라우저가 웹 서버로부터 응답을 받을 때 그 응답이 어떤 유형인지 나타내는 상태 값을 함께 받음
100번대 : 웹 서버가 순수하게 정보를 알려주기 위한 것으로, 보통 웹 서버가 보충 응답을 보낼 것임을 나타냄
요즘의 웹 서버는 잘 사용하지 않음
200번대 : 클라이언트의 요청이 성공적으로 접수되고 웹 서버가 처리한 다음 그 응답이 브라우저로 되돌려 보내짐을 뜻함
가장 흔한 HTTP 상태 값으로 200 OK가 있음
300번대 : 다른 페이지로 돌리는 경우를 표시
사용자가 웹 애플리케이션에 성공적으로 인증한 후 브라우저를 안전한 페이지로 전달할 때 가장 많이 사용
실직적으로는 200 OK가 전달된 다음 302 Redirect(다른 페이지로 전달됨)가 보내지는 식
400번대 : 이 응답 값은 클라이언트로부터 온 요청에 오류가 있음을 나타냄
즉, 사용자가 보낸 요청을 웹 애플리케이션이 처리할 수 없을 때를 뜻함
401 Unauthorized(권한 없음), 403 Forbidden(금지됨), 404 Not Found(발견되지 않음) 등
500번대 : 서버 측의 오류를 표시한다.
500 Internal Server Error(서버 내부 오류) 와 503 Service Unavailable(서비스 불가)
웹 서버 : 웹 애플리케이션을 호스팅하며 운영체제 위에서 동작하는 응용프로그램
사용자의 인터넷 브라우저와 서로 소통하기 위해 포트를 열어두고 동작하는 서비스
네트워크를 해킹해서 허가 없이 웹 서버의 파일 구조나 시스템 파일에 접근하려는 공격에 취약할 수 있음
웹 애플리케이션 : 웹 서버에서 웹 사용자가 상호작용하기 위해 실질적으로 돌아가는 프로그램
권한 없이 무언가 하려는 방대한 공격의 영향을 받음
웹 사용자 : 웹 애플리케이션을 관리하는 내부 사용자와 고객 같은 외부 사용자를 대상으로 공격할 가치가 있다.
웹 애플리케이션에서 XSS나 CSRF 취약점이 발생하는 지점
웹 사용자를 목표로 삼아 기술적인 사회공학적 해킹을 하는 경우도 여기에 포함
데이터베이스 서버와 데이터베이스 : 웹 애플리케이션이 사용하는 데이터베이스를 호스팅 하는 시스템
민감한 데이터에 CRUD를 허용하는 공격에 취약
파일 서버 : 웹 서버의 파일 올리기/ 내려받기 기능을 갖고 있는 시스템
웹 서버에 할당된 드라이브는 권한 없는 공격자가 서버 자원에 접근하려는 공격에 취약
가장 흔한 웹 취약점
주입 공격
사용자의 신뢰되지 않은 데이터가 명령이나 질의의 일부로 웹 애플리케이션에 바로 전달될 때 발생
공격자는 웹 애플리케이션을 속여 의도치 않은 명령을 수행하게 하거나 권한 없는 자료에 접근하도록 함
해커가 웹 애플리케이션에 먹인 악성 입력 값이 안전하지 않은 방식으로 작용할 때 일어남
웹 애플리케이션에서 사용자가 악의적으로 입력할 수 있는 곳이 있다면 어디서나 발생할 수 있다.
웹 애플리케이션이 사용자가 입력한 값을 검토하지 않은 채 받아들여 처리하면 발생
해커는 웹 애플리케이션에 보내는 질의문에 영향을 주어 원하는 데이터를 결과 값으로 가져오도록 명령어를 재구성
크로스 사이트 스크립트
응용프로그램이 사용자 입력 값을 요청의 일부로 받ㄱ아들인 후 응답 결과로 사용하는 데 있어 적절한 방식으로 데이터를 검증하지 않는 경우에 발생
희생자 브라우저에서 사용자 세션을 가로채고, 키 값을 저장하고, 사용자를 악성 사이트로 보내거나, 그 외 무엇이든 처리하는 스크립트를 실행할 수 있다.
해커는 악성 스크립트를 희생자의 브라우저에 주입하고, 이런 스크립트는 애플리케이션으로부터 전달되는 응답의 일부가 되므로 희생자 브라우저는 그 값을 신뢰하고, 해당 스크립트를 실행한다.
반사형 XSS (reflected XSS)
반사형 XSS에서 보내지는 페이로드는 단지 한 번의 요청 동안만 유효하다.
누구든 악성 스크립트를 포함하고 있는 링크를 누르면, 바로 그 사용자가 공격에 직접적으로 영향을 받는다. 그러므로 해커와 희생자는 1:1의 비율을 갖게 된다.
저장형 XSS (stored XSS)
웹 애플리케이션에서 찾아내가 더 어려울 뿐 아니라 다양한 요청에 걸쳐 지속되면서 한 번의 공격으로 여러 사용자를 무력화할 수 있기 때문에 훨씬 더 심각하게 피해를 준다.
해커가 악성 스크립트를 응용프로그램에 주입하고, 그 스크립트가 모든 방문자에게 노출될 때 발생
이 스크립트는 웹 페이지를 생성하며 호출되는 데이터베이스나 사용자 포럼에서 메시지를 출력할 때, 또는 입력 값을 저장하는 매커니즘에 숨겨짐
사용자들이 요청하는 페이지마자 XSS 침투 매커니즘은 그 각각의 브라우저에서 실행됨. 그러므로 해커와 희생자는 1 : N의 관계가 성립
인증과 세션 관리 무너뜨리기
세션 : 사용자가 인증하면 할당되는 고유의 식별자
웹 애플리케이션이 어떻게 활용하는가에 따라 여러 취약점과, 그와 엮인 공격법이 만들어짐
인증이나 세션 관리 기능이 정확히 구현되지 않았다면 해커는 구현상의 오류를 추적하여 PW, 키 값, 세션 토큰 또는 사용자 정보를 알아냄(패스워드 초기화, 비밀번호 변경 및 게정 복구 등)
웹 애플리케이션은 세션을 관리하여 각 사용자의 요청 내용을 추적
세션 관리 기능이 없다면 매 번 요청할 때마다 로그인해야 함(상품 검색 - 로그인 - 장바구니 - 로그인 - 결제 - 로그인 ...)
크로스 사이트 요청 변조(CSRF)
이미 인증된 사용자에게 정교하게 만들어진 악성코드를 보내고 피해자가 모르는 사이에 필요한 매개변수를 정당한 요청으로 위장
악성 스크립트(반사형XSS)는 여전히 피해자의 브라우저에서 실행되지만, CSRF는 웹 애플리케이션에 정당한 명령을 요청
비밀번호 바꾸기, 새로운 사용자 만들기, CMS를 통해 웹 애플리케이션 만들기 등 실행 가능
해커가 요청을 완료하기 위해 필요한 매개변수를 정확히 알고 있고 피해자가 애플리케이션에 인증되어 있는 상황이라면 마치 사용자가 실행하는 것 처럼 수행됨
잘못된 보안 설정
모든 응용 계층의 보안이 포함
응용 계층 : 웹 애플리케이션 프로그램이 실제로 접근하고 실행하는 운영체제, 웹 서버와 데이터베이스 관리 시스템
보안 설정을 강화하여 허가 받지 않은 상태에서는 우ㅞㅂ 서버에 접근할 수 없도록 조치하지 않으면 심각한 수준이 됨
사례) 오래되거나 쓸모없는 소프트웨어, 활성화된 불필요한 서비스, 안전하지 않은 계정 정책, 자세한 오류 메시지 등
효과적인 보안이란 응용프로그램, 프레임워크, 애플리케이션 서버, 웹 서버, 데[이터베이스 서버 및 운영체제 각각에 대해 안전하게 정의하고 적용할 때 가능함. 이러한 모든 환경의 기본값을 안전하고 새롭게 정의하고 구현하고 유지해야 함. 또한 소프트웨어나 애플리케이션에서 사용하는 프로그램 라이브러리는 최신 상태로 유지해야 함