웹 보안 공격

귀찮Lee·2022년 7월 24일
0
post-thumbnail

◎ Web application Security

  • 개발자들이 웹사이트, 모바일 어플, 웹API 등을 만들 때에 해커들의 공격을 막기 위한 보안
  • 여러가지 공격들 : SQL Injection, XSS, CSRF

◎ CSRF(Cross Site Request Forgery)

  • CSRF(Cross Site Request Forgery)

    • 다른 사이트(cross-site)에서 유저가 보내는 요청(request)을 조작(foragery)하는 것 ex) 이메일에 첨부된 링크를 눌렀더니, 내 은행계좌에서 돈이 빠져나감
    • 해커가 직접 데이터를 접근할 수 없다. ex) 다른 origin 이기 떄문에 response에 직접 접근할 수 없음
  • CSRF 공격을 하기 위한 조건

    • 쿠키를 사용한 로그인 : 유저가 로그인 했을 때, 쿠키로 어떤 유저인지 알 수 있어야 함
    • 예측할 수 있는 요청 parameter를 가지고 있어야 함 : request에 해커가 모를 수 있는 정보가 담겨있으면 안됨
  • GET 요청 공격
    < a href="https://codestatesbank/transfer?account_num=000000&amount=100000 >

    • 해킹 당하는 사람의 브라우저 환경에서 해당 링크에서 account_number를 바꾸어 전송함 (악성 링크를 클릭하게 만들어 요청을 보냄)
  • POST 요청 공격
    POST http://codestatesbank.com/password/change
    {password:user's-new-password}

    • 해커가 관련 웹사이트를 만듦 (document에 form 작성)
    • 숨겨진 form들이 비밀번호 바꾸는 post 요청을 보냄
  • CSRF를 막는 법

    • CSRF 토큰을 사용 : 서버측에서 CSRF 공격에 보호하기 위한 문자열을 유저의 브라우저와 웹 앱에만 적용
    • Same-site cookie 사용하기 : 같은 도메인에서만 세션/쿠키를 사용할 수 있다.

◎ SQL Injection

  • SQL Injection

    • 데이터베이스에서 임의의 SQL문을 실행할 수 있도록 명령어를 삽입하는 공격 유형
    • 응용 프로그램의 보안상의 허점을 이용해 데이터베이스를 비정상적으로 조작하며, 이로 인해 기록이 삭제되거나 데이터가 유출 가능
  • 공격 시나리오

    • 보통 사용자가 input form에 직접 무언가 작성하는 상황에서 발생
    • 입력받은 아이디와 패스워드를 통해 데이터베이스를 조회하는데, 패스워드에 SQL 문을 포함하여 보냄
    -- id를  ' OR '1'='1  이라고 보냄
    SELECT * 
    FROM users
    WHERE auth='admin'
    AND id='' OR '1'='1';
    -- id를  ';DROP TABLES users;--  이라고 보냄
    AND id='';DROP TABLES users;--';
  • SQL Injection 대응 방안

    • 입력(요청) 값 검증

      • SQL문은 사람이 사용하는 자연어와 비슷하기 때문에 키워드를 막기엔 한계가 있다.
      • 화이트리스트 방식으로 해당 키워드가 들어오면 다른 값으로 치환하여 SQL Injection에 대응 가능
      • 화이트리스트 : 기본 정책이 모두 차단인 상황에서 예외적으로 접근이 가능한 대상을 지정하는 방식 또는 그 지정된 대상들
    • Prepared Statement 구문 사용

      • Prepared Statement 구문을 사용하면 사용자의 입력이 SQL문으로부터 분리되어 SQL Injection을 방어 가능
      • 사용자의 입력 값이 전달 되기 전에 데이터베이스가 미리 컴파일하여 SQL을 바로 실행하지 않고 대기하며, 사용자의 입력값을 단순 텍스트로 인식
      • 입력 값이 SQL문이 아닌 단순 텍스트로 적용
    • Error Message 노출 금지

      • 공격자는 DB의 Error Message를 통해 테이블이나 컬럼 등 DB의 정보를 얻을 수 있다.
      • 따라서 에러가 발생한 SQL문과 에러 내용이 클라이언트에 노출되지 않도록 별도의 에러핸들링이 필요

◎ XSS(Cross Site Scripting)

  • XSS(Cross Site Scripting)

    • 공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자의 세션을 가로채거나, 웹사이트를 변조하거나, 악의적 콘텐츠를 삽입하거나, 피싱 공격을 진행하는 것
  • XSS 종류

    • Stored XSS : 주로 웹 게시판의 형태에서 악의적인 스크립트가 담긴 게시글을 올리는 형태로 나타남
    • Reflected XSS :
      • URL 파라미터를 사용해 서버에 저장하지 않고 바로 스크립트를 만드는 기법
      • 웹앱의 저장된 파라미터를 사용할 때 나타나는 취약점을 이용, 주요 대상은 검색엔진
      • 검색 결과가 없는 경우, 입력값을 HTML 문서에 포함하여 응답하는 특성을 이용
    • DOM Based XSS
  • 추가 자료

◎ Clickjacking (클릭재킹)

  • Clickjacking (클릭재킹)

    • 사용자가 자신이 클릭하고 있다고 인지하는 것과 다른 어떤 것을 클릭하게 속이는 기법
    • 잠재적으로 공격자는 비밀 정보를 유출시키거나 그들의 컴퓨터에 대한 제어를 획득할 수 있게 됨
  • 특징

    • 다양한 웹 브라우저들과 컴퓨팅 플랫폼들에서의 취약점으로서 브라우저 보안 이슈이다.
    • 보기에 위험하지 않는 특징을 갖는 HTML 웹페이지들이 예상되지 않는 행동을 수행할 수 있음로써 가능해진다.
  • Clickjacking 예시

    • 대표적으로, 정상적인 버튼 밑에 해킹 기능을 넣은 보이지 않는 버튼을 배치하는 방법
    • 라이크재킹 : 의도와 다르게 페이스북의 좋아요를 누르게 하는 기법
    • 커서재킹 : 사용자가 인식하는 위치에서 커서를 바꾸기 위한 UI 리드레싱 기법
    • 패스워드 관리 공격 : 현재의 로그인 페이지의 프로토콜이 과거 암호가 저장되었던 프로토콜과 다르다면 브라우저는 자동채우기를 거부해야 하는데, 채우는 경우 발생
  • 서버 측 Clickjacking 예방법

    • X-프레임-옵션 (HTTP 헤더 X-Frame-Options)
      • 웹사이트 소유자들에 의해 헤더는 선호되는 프레이밍 정책을 가짐.
      • 설정 값에 따라 각각 프레이밍, 외부 사이트에의한 프레이밍을 금지하고 또는 단지 특별한 사이트에 대한 프레이밍만 허용 할 수 있음
    • 컨텐트 보안 정책
      • frame-ancestors 지시자는 iframe나 객체들을 사용하는 잠재적으로 위험한 페이지에 의한 컨텐트의 삽입을 허용하거나 금지할 수 있다.
      • 자세한 사항은 더 찾아볼 것
  • 참고 자료

◎ Session Fixation (세션 고정 공격)

  • Session Fixation

    • 로그인 시 발급받은 세션 ID가 로그인 전/후 모두 동일하게 사용되어, 악의적인 사용자가 피해자의 세션을 하이재킹 하여 정상적인 사용자로 위장하는 행위
  • 특징

    • "세션에 대한 만료" 또는 "서로 다른 IP의 동일한 세션"에 대해 취약한 웹 애플리케이션에서 해당 공격에 노출될 가능성이 존재
    • 세션 ID를 탈취 당할 경우, 쉽게 당할 수 있는 방식이다.
  • 공격 예시

    1. A가 세션 ID를 특정하는 URL을 만듦
    2. A는 만든 링크를 포함한 자료를 B에게 보냄
    3. B가 해당 URL을 클릭했을 때, 로그인 페이지를 보여줌
    4. B가 로그인을 완료했을 때, B는 A와 동일한 세션을 사용
    5. A는 B의 께정으로 로그인 한 것과 동일함
  • 참고 자료

◎ DOS (Denial Of Service attack, 서비스 거부 공격)

  • DOS

    • 시스템을 악의적으로 공격해 해당 시스템의 리소스를 부족하게 만듦
    • 대상 시스템에 과도한 트레픽을 보내거나, 트래픽 발생을 유도함
      • 다른 이용자의 서비스 이용을 막음
  • DOS 종류 (여러 종류가 있음)

    • Buffer overflow attack
      • 개발자들이 본래 설계한 시스템 처리 능력보다 많은 트래픽을 대상으로 보냄으로써 발생
    • ICMP flood
      • 대상 네트워크에서 잘못 구성된 장치를 타깃
      • 해당 장치가 단일 노드 대신 모든 노드(컴퓨터)에 가짜 패킷을 배포하도록 하여, 네트워크 과부하를 초래
    • Tear Drop 공격
      • 망가진 IP 조각을 전송해 운영체데를 공격
    • 영구 서비스 거부 공격
      • 하드웨어를 표적으로 한 공격, 시스템을 손상시켜 원래 목적으로 사용하지 못하게 만듦
  • DDOS(Distributed DoS attack)

    • 다수의 시스템을 통해 공격을 시도
    • 공격자가 여러 대의 컴퓨터를 감염시켜 좀비 PC로 만들고, 이 PC를 제어해 공격함
profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!

0개의 댓글