관리 메뉴

HeeJ's

[00] 웹 해킹 기초 본문

<Book Review>/<이제 시작이야 웹 해킹 입문>

[00] 웹 해킹 기초

meow00 2023. 10. 17. 00:37

주목할 만한 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를 통해 웹 애플리케이션 만들기 등 실행 가능

해커가 요청을 완료하기 위해 필요한 매개변수를 정확히 알고 있고 피해자가 애플리케이션에 인증되어 있는 상황이라면 마치 사용자가 실행하는 것 처럼 수행됨

 

잘못된 보안 설정

모든 응용 계층의 보안이 포함

응용 계층 : 웹 애플리케이션 프로그램이 실제로 접근하고 실행하는 운영체제, 웹 서버와 데이터베이스 관리 시스템

보안 설정을 강화하여 허가 받지 않은 상태에서는 우ㅞㅂ 서버에 접근할 수 없도록 조치하지 않으면 심각한 수준이 됨

사례) 오래되거나 쓸모없는 소프트웨어, 활성화된 불필요한 서비스, 안전하지 않은 계정 정책, 자세한 오류 메시지 등

 

효과적인 보안이란 응용프로그램, 프레임워크, 애플리케이션 서버, 웹 서버, 데[이터베이스 서버 및 운영체제 각각에 대해 안전하게 정의하고 적용할 때 가능함. 이러한 모든 환경의 기본값을 안전하고 새롭게 정의하고 구현하고 유지해야 함. 또한 소프트웨어나 애플리케이션에서 사용하는 프로그램 라이브러리는 최신 상태로 유지해야 함