본문 바로가기
3학년 학사/네트워크 보안

[네트워크 보안] #14. 웹 보안

by whiteTommy 2024. 12. 10.
반응형
더보기

목차

  • 웹과 HTTP 의 이해
  • 웹 해킹
  • 웹의 취약점과 보완

 

예상 문제

  • XSS 와 CSRF 의 차이점
    • XSS 는 악성 코드가 클라이언트에서 실행
    • CSRF 는 악성 코드를 서버에 요청

 

웹과 HTTP 의 이해

  • HTTP 프로토콜 

    • 설명
      • 가장 많이 쓰이는 프로토콜
      • 웹 서버 = HTTP 서버
      • 웹 브라우저와 서버 간 통신을 위한 무상태(stateless) 프로토콜
      • 클라이언트가 request 를 보내고 서버가 response 를 반환하는 방식으로 작동
    • 연결 과정
      • 서버가 준비상태 (Connect)
      • 클라이언트가 읽고자 하는 문서를 서버에 요청. (Request)
      • 서버가 요청에 대한 데이터를 처리하고 응답. (Response)
      • 연결을 끊음. (Close)
    • HTTP Request
      • GET
        • 가장 일반적인 HTTP Request 형태로, 요청 데이터의 인수를 웹 브라우저의 URL로 전송
        • 데이터가 주소 입력 란에 표시되므로 최소한의 보안도 유지되지 않는 취약한 방식
        • 게시판의 경우: 목록이나 글보기 화면
      • POST
        • URL에 요청 데이터를 기록하지 않고 HTTP 헤더에 데이터를 전송
        • 인수값을 URL로 전송하지 않으므로 다른 사용자가 링크로 해당 페이지를 볼 수 없음.
        • 게시판의 경우: 게시글을 저장·수정·삭제하거나 대용량 데이터를 전송할때는 POST 방식을 사용.
      • 기타 방식
        • HEAD : 서버 측 데이터를 검색하고 요청
        • OPTIONS : 자원에 대한 요구/응답 관계와 관련된 선택 사항 정보를 요청
        • PUT : 메시지에 포함된 데이터를 지정된 URI 장소에 그 이름으로 저장
        • DELETE : URI 에 지정된 자원을 서버에서 지울 수 있게 함
        • TRACE : 요구 메시지의 최종 수신처까지 루프백을 검사
    • HTTP Response
      • 클라이언트의 요청에 대한 서버의 응답.
      • 서버에서 쓰이는 프로토콜 버전, Request에 대한 실행결과 코드, 간략한 실행결과 설명문 내용이 담겨있음
      • 추가 정보로 전달한 데이터 형식, 길이 등이 MIME 형식으로 표현되어 있음
      • 헤더 정보 뒤에는 실제 데이터 (HTML 또는 이미지 파일)가 전달됨
      • 데이터 전달이 끝나면 서버 연결을 끊음
        실행 결과 코드 내용 설명
        100번대 정보 전송 HTTP 1.0 까지는 계열에 대한 정의가 이루어지지 않았기 때문에 실험 용도 외에은 100번대 서버 측의 응답이 없다.
        200번대 성공 클라이언트의 요구가 성공적으로 수신 및 처리되었음을 의미한다.
        300번대 리다이렉션 해당 요구 사항을 처리하기 위해 사용자 에이전트가 수행해야 할 추가적인 동작이 있음을 의미한다.
        400번대 클라이언트 측 에러 클라이언트에 오류가 발생했을 때 사용한다. 예를 들면 클라이언트가 서버에 보내는 요구 메시지를 완전히 처리하지 못한 경우 등이다.
        500번대  서버 측 에러 서버 자체에서 발생한 오류 상황이나 요구 사항을 제대로 처리할 수 없을 때 사용한다.


    • 프론트 엔드
      • HTML
        • 프론트 엔드 : 클라이언트, 즉 웹 브라우저에서 실행되는 프로그램 영역
        • 서버에 HTML 문서를 저장하고 있다가 클라이언트가 특정 HTML 페이지를 요청하면 해당 문서를 전송
        • 클라이언트는 이 웹 페이지를 해석하여 웹 브라우저에 표현 (정적인 웹 페이지)
        • 웹 브라우저와 웹 서버 사이에 전달되는 값을 변조하여 정적인 웹 페이지는 바꿀 수 있는 가능성이 매우 낮음
      • CSS (Client Side Script)
        • 동적인 웹 서비스를 제공하기 위해서 javascript, visual basic script (VBS) 등이 사용
        • 서버가 아닌 웹 브라우저에서 해석되어 화면에 적용되어 웹 서버의 부담을 줄이면서도 다양한 기능을 수행
    • 백 엔드
      • 서버에서 프로그램(Server Side Script)을 실행하여 그 결과로 웹페이지 내용이 변경됨
      • 최근 백엔드 구조
        • 웹 서비스를 제공하는 데 필요한 REST API 를 제공하는 영역
        • 흔히 JAVA, .NET, 파이썬, 루비, 자바스크립트 등이 사용
        • 클라이언트에 구현된 기능에 필요한 인자를 전달받고, 이 인자에 따라 함수처럼 그에 대한 결과만 전달
        • 함수는 URL 에 따라 구분되며, 보통 그 결과는 JSON 형태로 클라이언트에 전달
        • CSS 가 JSON 결과를 이용, 페이지 구성

 

웹 해킹

  • 웹 취약점 스캐너를 통한 정보 수집
    • 빠른 시간 내에 다양한 접속 시도를 할 수 있다.
    • 확인된 취약점은 실제 보안 문제가 있는 취약점이 아닌 경우가 많음
  • 웹 프록시를 통한 취약점 분석
    • 클라이언트가 웹 서버와 웹 브라우저 간에 전달되는 모든 HTTP 패킷을 웹 프록시를 통해 확인하면서 수정 가능
    • http://portswigger.net/burp 에서 설치파일 다운로드 (community edition)
    • 웹 프록시로 실행
      • Settings 
        • Proxy -> Proxy Settings
        • Request interception rules 해제
        • Response interception rules 체크
        • Intercept on -> open browser
      • response 바꾸기
        • forward
        • pretty 본문 부분을 수정할 수 있음
    • 구글을 통한 정보 수집
      • 웹 해킹을 하면서 많은 정보를 수집하려면 구글 같은 검색 엔진이 유용
        검색 인자  설명 검색 추가 인자
        site 특정 도메인으로 지정한 사이트에서 검색하려는 문자열이 포함된 사이트를 찾는다. YES
        filetype 특정 파일 유형에 한해 검색하는 문자가 들어 있는 사이트를 찾는다. NO
        link 링크로 검색하는 문자가 들어 있는 사이트를 보여준다. NO
        cache 특정 검색어에 해당하는 캐시된 페이지를 보여준다. NO
        intitle 페이지 제목에 검색하는 문자가 들어 있는 사이트를 찾는다 NO
        inurl 페이지 URL 에 검색하는 문자가 들어 있는 사이트를 찾는다. NO
      • 주요 검색 인자
        • 특정 도메인이 있는 페이지에서 admin 문자열 검색 : site
          • site:ssu.ac.kr admin
        • 파일 확장자가 txt 이고 문자열 password 가 들어간 파일 검색 : filetype
          • filetype:txt password
        • 디렉터리 리스팅이 가능한 사이트 검색 : intitle
          • intitle:index.of admin
      • 검색 엔진의 검색을 피하는 방법 : robots.txt
        • 구글 검색 엔진의 검색을 막는다.
          • User-agent : googlebot
        • 모든 검색 엔진의 검색을 막는다.
          • User-gent : *
        • dbconn.ini 파일을 검색하지 못하게 한다.
          • Disallow:dbconn.ini
        • admin 디렉터리에 접근하지 못하게 한다.
          • Disallow:/admin

 

웹의 취약점과 보완

국제 웹 보안 표준기구(OWASP) 에서는 각 분야별 상위 열 가지 주요 취약점을 발표

 

명령 삽입 취약점 (A1. Injection)

  • 설명 : 서버로 전송되는 인수에 특정 명령을 실행할 수 있는 코드를 포함
  • 예시 : SQL Injection
    • 로그인 시 : 웹서버 -> DB 로 호출하는 SQl 문
      • SELECT * FROM "user"
        WHERE e_mail_address="입력된 아이디" AND password="입력된 패스워드"
    • SQL Injection into 패스워드 필드
      • 패스워드 : ' or ''='
        • SELECT * FROM "user"
          WHERE e_mail_address = 'wishfree@empas.com' and password =' ' or ''='' 
          항상 참이 되므로 열람 가능

 

인증 및 세션 관리 취약점 (A2. Broken Authentication and Session Management)

  • 설명 
    • 취약한 패스워드 설정 : 웹의 경우 사용자는 개발자가 처음 설정한 패스워드를 그대로 쓰는 경우가 많음
    • 사례 : 알뜰폰 가입페이지 
      • 주민번호, 이름 => 실명 확인
      • 공격자 휴대폰 본인인증 SMS
      • 최초입력 이름 (도용된 명의) 로 개통
    • 사용자 변경
      1. 최초 인증 과정은 자신의 아이디와 패스워드의 입력으로 시작
      2. 인증을 한 뒤 세션인증값을 쿠키에 넣어 줌
      3. 새로운 페이지에 접근할 때 앞서 수신한 세션 토큰을 제출하여 해당 세션이 유효한 인증인지 확인
      4. 공격자는 세션 인증 값은 그대로 사용하고 UserNo 값만 변경 (피해자의 것으로)하여 다른 계정의 권한 획득

 

 

 

XSS 취약점 (A3. Cross-Site Scripting)

  • 설명
    • XSS : 공격자가 작성한 스크립트가 다른 사용자에게 전달되는 것
    • 다른 사용자의 웹 브라우저 안에서 적절한 검증 없이 실행되기 때문에 사용자의 세션을 탈취하거나 웹 사이트를 변조하고 악의적인 사이트로 이동할 수 있음
  • 공격 구조
    1. 임의의 XSS 취약점이 존재하는 서버에 XSS 코드를 작성하여 저장
    2. 공격자가 작성해 놓은 XSS 코드에 해당 웹 서비스 사용자가 접근
    3. 웹 서버는 사용자가 접근한 XSS 코드가 포함된 게시판의 글을 사용자에게 전달
    4. 사용자의 시스템에서 XSS 코드가 실행
    5. XSS 코드가 실행된 결과가 공격자에게 전달되고 공격자는 공격을 종료

 

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

  • 설명 
    • 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위 (수정, 삭제, 등록, 송금 등) 를 하게 만드는 공격
    • XSS 공격은 악성 스크립트가 클라이언트에서 실행되는데, CSRF 는 사용자가 악성스크립트를 서버에 요청


<body onload = "document.csrf.submit()">
<form name="csrf" action="http://www.shop.co.kr/malladmin/order/order.jsp" method="POST">
	input type = "hidden" name = "uid" value = "wishfree"
    input type = "hidden" name = "mode" value = "pay_for_order"
    input type = "hidden" name = "amount" value = "10000"
</form>

 

 

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

  • 설명
    • 인증된 사용자가 수행할 수 있는 것에 대한 제한 (Policy Enforcement) 제대로 적용하지 않은 것
    • 디렉터리 탐색
      • 웹 브라우저에서 확인 가능한 경로의 상위를 탐색하여 특정 시스템 파일을 다운로드
      • 게시판 등에서 첨부 파일을 내려받을 때는 다음과 같이 백 엔드 서비스를 주로 사용
        http://www.wishfree.com/board/download.jsp?filename=사업계획.hwp

      • 정상적인 다운로드 페이지를 이용하여 다른 파일의 다운로드를 요청
        http://www.wishfree.com/board/download.jsp?filename=../list.jsp
        http://www.wishfree.com/board/download.jsp?filename=../../../../../../../etc/passwd

 

 

보안 설정 오류 (A5. Security Misconfiguration)

  • 디렉터리 리스팅
    • 웹 브라우저에서 웹 서버의 특정 디렉터리를 열면 그 디렉터리에 있는 파일과 목록이 모두 나열되는 것
    • 상당수 디렉터리 리스팅은 관리자가 설정 사항을 인지하지 못했거나 웹 서버 자체의 취약점 때문에 발생
  • 백업 및 임시 파일 존재
    • 웹 사이트 개발 시 웹 서버 백업 파일이나 임시 파일을 삭제하지 않고 방치 
      -> 공격자가 백업 파일을 통해 웹 어플리케이션의 내부 로직, DB 접속 정보 등 획득 가능
  • 미흡한 주석 관리
    • 웹 페이지 주석에는 웹 어플리케이션 개발 과정, 주요 로직에 대한 설명, 디렉터리 구조, 테스트 소스 정보, id 와 pw 등이 기록될 수 있음
    • 웹 어플리케이션 개발 시 주석에 정보를 기록할 때는 주의해야 함
  • 파일 업로드 제한 부재
    • 공격자가 웹 서버에 악의적인 파일을 전송한 뒤 원격지에서 실행하면 웹 서버 장악, 내부 침투 공격 수행 가능
    • 웹 해킹의 최종 목표인 웹 서버 통제권을 얻기 위해 반드시 성공해야 하는 공격

 

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

  • 웹 사이트 해킹으로 개인 정보 유출
    • 데이터 중요도에 따라 암호화 로직을 사용하고 DB 테이블 단위에서 암호화를 수행해야 함
  • 실수로 개인정보가 웹페이지의 노출 : 노출 진단 프로그램

 

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

  • 웹 어플리케이션 차원에서 해킹 공격을 탐지, 방지, 대응할 수 있는 기능을 갖추고 있지 않았음
  • APT 공격이 일반화되면서 보안 솔루션으로 탐지가 어렵자 웹 어플리케이션 수준에서 자동으로 탐지, 로깅, 응답 및 공격 시도 차단을 포함하도록 권고
    • 어플리케이션 차원에서 IDS

 

취약점이 있는 컴포넌트 사용 (A9. Using Components with known Vulnerabilities)

  • 컴포넌트, 라이브러리, 프레임워크 중 보안에 취약한 컴포넌트가 악용
  • 사용하려는 컴포넌트, 라이브러리의 보안 취약점을 충분히 검토해야 함

취약한 API (A10. Underprotected APIs)

  • API 를 통해 웹 서비스 상호 간의 연동이 이루어지므로 API 사용시 보안에 취약하지 않은지 충분한 검토가 필요

 

접근제어 구성 요소

  • PEP (Policy Enforcement Point)
    • 역할
      • 사용자나 장치로부터 접근 요청을 수신.
      • 요청을 PDP(Policy Decision Point)로 전달.
      • PDP의 결정(허용 또는 거부)을 받아 접근을 제어.
  •  PDF (Policy Decision Point)
    • 역할
      • PEP로부터 받은 요청을 평가.
      • 정책에 따라 허용 또는 거부를 결정.
      • PIP(Policy Information Point)와 PRP(Policy Retrieval Point)에서 필요한 정보를 가져와 정책을 기반으로 결정을 내림.
  • PIP (Policy Information Point)
    • PDP가 요청을 평가하는 데 필요한 사용자, 리소스, 환경 정보를 제공.
    • 예를 들어, 사용자 역할(role), 권한(level), 리소스의 민감도(classification) 등을 제공.
  • PRP (Policy Retrieval Point)
    • 정책 데이터 저장소 역할.
    • PDP가 필요한 정책 데이터를 검색할 수 있도록 지원(Support)
    • 정책은 일반적으로 XACML 형식으로 작성.
  • PAP (Policy Administration Point)
    • 역할:
      • 리자가 정책을 작성, 관리(Manage), 업데이트할 수 있도록 지원.
      • 작성된 정책은 PRP에 저장되어 PDP가 접근할 수 있도록 준비됨.

 

보완

  • 특수 문자 필터링
    • 웹 해킹의 가장 기본적인 형태 중 하나는 인수 조작으로 예외적인 실행을 유발하기 위해 특수문자를 포함
    • 본문에 포함되는 주요 특수 문자를 함수를 이용하여 제거함으로써 XSS 취약점, SQL 삽입 공격을 방어 
      특수문자 관련된 공격 특수 문자 관련된 공격
      < XSS 취약점 공격 = SQL 삽입 공격
      > XSS 취약점 공격 ; SQL 삽입 공격
      & XSS 취약점 공격 * SQL 삽입 공격
      " XSS 취약점 공격 . SQL 삽입 공격
      ? XSS 취약점 공격 .. SQL 삽입 공격
      ' XSS 취약점 공격, SQL 삽입 공격 - - SQL 삽입 공격
      / XSS 취약점 공격, 디렉터리 탐색 공격    
  • 취약점 보완
    • 서버 통제 작용
      • CSS 기반의 언어로 필터링하는 경우에는 공격자가 로직을 파악하면 필터링이 쉽게 무력화되므로 ASP, JSP 등 과 같은 SSS 로 필터링 로직을 수행해야 함
    • 지속적인 세션 관리
      • 모든 웹 페이지에 일관성 있는 인증 로직을 적용하려면 기업 또는 웹사이트 단위에서 세션 인증 로직을 표준화하고, 표준을 준수하여 웹 페이지를 개발하도록 해야 함

 

 

 

반응형