[모의해킹] 실습환경 구성하기

Preview

모의해킹은 중요 시스템의 정보를 탈취, 조작, 파괴 등이 가능한지 파악하는 취약점 진단을 수행한다. 체크리스트 기준으로 항목별 취약점 점검하는 업무를 수행하기 위해 위협이 있을 수 있는 웹사이트를 구현하고 공격자의 입장에서 침투테스트를 실시한다. 진단 항목을 올바르게 이해하고 프로젝트 수행 시 더 나은 결과물을 산출하기 위함이다. 자신만의 웹서버를 가지고 있고 그 서버가 입력 값에 따라 어떤 에러를 내는지 이해한다면 웹 취약점의 원리파악이 쉬워질 것이다.

 

구현 환경

웹 서비스를 개발 / 구축한 환경은 다음과 같다. 웹 취약점 진단 항목을 정확하게 이해하기 위해 웹 페이지 내 에러메시지 출력 설정이 되어 있으며 서버측 소스코드 및 디버깅 정보가 포함될 수 있다.

환경은 APM(Apache2, PHP, Mysql(MariaDB)로 구성하였으며 취약한 웹 사이트의 구현을 목적으로 하기 때문에 서버의 보안설정은 최소로 설정하였고 서버의 웹 서비스 데몬의 권한도 최고로 부여하였다.

사전에 협의되지 않은 타인의 서버를 대상으로 실습, 공격하는 행위는 정보통신망법에 저촉되는 행위이므로 꼭 자신만의 서버를 구성하여 실습하도록 한다.

종류

버전

OS

Ubuntu 18.04 LTS

Apache

2.4.38

PHP

7.3.19

DB

MariaDB 10.3.27

phpMyAdmin

5.0.4

[1] 대상 환경

 

 

진단 도구

구분

진단 도구

설명

프록시

BurpSuite

WEB 프록시 기능을 이용한 HTTP 분석 툴

네트워크

EditThisCookie

쿠키값 분석과 조작 도구

Wireshark

네트워크 패킷 분석 프로그램

Socat

리버스 쉘 연결  도구

 

연구항목

포스팅은 다음의 순서로 진행된다. 

No.

구분

취약점 항목

내용

1

입력 값

검증 부재

SQL Injection

대화형 웹 사이트에 비정상적인 사용자 입력 값 허용을 차단하여 악 의적인 데이터베이스 접근 및 조작

2

XSS

사용자의 클라이언트에서 임의의 스크립트가 실행되는 취약점

3

취약한 파일 처리

파일 업로드

파일을 업로드할 수 있는 기능을 이용하여 시스템 명령어를 실행할 수 있는 프로그램을 업로드하는 취약점

4

파일 다운로드

파일 다운로드 스크립트를 이용하여 시스템 주요 파일을 다운로드할 수 있는 취약점

5

취약한 인증

및 세션 관리

CSRF

사용자의 세션 쿠키와 다른 인증 정보를 포함하는 위조된 HTTP 요청을 취약한 웹 애플리케이션에 전송하는 취약점

6

자동화 공격

웹 애플리케이션의 프로세스에 자동화된 공격을 수행함으로써 자원을 고갈시키거나 계정을 탈취할 수 있는 취약점

7

불충분한 인증

민감한 데이터에 접근할 수 있는 곳에 취약한 인증 메커니즘으로 구현된 취약점

8

불충분한 인가

민감한 데이터에 접근할 수 있는 곳에 취약한 인증 메커니즘으로 두지 않는 취약점

9

중요 정보

처리 미흡

정보 누출

웹 사이트 데이터가 노출되는 것으로 개발과정의 주석이나 오류 메시지 등에서 중요한 정보가 노출되어 공격자에게 2차 공격을 하기 위한 중요한 정보를 제공할 수 있는 취약점

10

데이터 평문 전송

서버와 클라이언트 간 통신 시 암호화하여 전송하지 않아 중요 정보 등이 평문으로 전송되는 취약점

[3] 취약점 연구 항목

 

서버 구축

APM 설치 및 서버 환경을 구축한다. https://blog.lael.be/post/7264 사이트를 기반으로 진행하였으며, 친절하게 설명되어 있다. 이 포스팅은 서버 구축이 핵심 주제가 아니니 간단하게 소개만 하도록 하겠다.

 

sudo apt upgrade

모든 서버 구축의 시작은 최신 패키지로의 업데이트이다.

sudo apt-get check && sudo apt-get update && sudo apt-get upgrade && sudo apt-get autoremove && sudo apt-get autoclean

 

apache2 설치

sudo apt install apache2

 

php 설치

sudo apt install php php-mysql

 

php설치 확인

sudo vim /var/www/html/info.php

<?php phpinfo(); ?>

localhost/info.php 로 확인

 

MySQL 서버 설치

sudo apt install mysql-server

MYSQL 지원 종료로 MariaDB를 설치한다.
https://linuxize.com/post/how-to-install-mariadb-on-ubuntu-18-04/

sudo apt install mariadb-server

 

초기화

/usr/bin/mysql_secure_installation

 

설치 확인

sudo systemctl status mariadb

 

phpMyAdmin설치(옵션)

phpMyAdmin의 설치는 php와 SQL Database의 연결과 관리를 쉽게 해준다.

 

sudo apt install phpmyadmin

localhost/phpmyadmin으로 확인

 

/etc/apache2/apache2.conf 을 열고 다음과 같이 설정한다.

<Directory /var/www/>
        Options FollowSymLinks MultiViews
        AddType application/x-httpd-php .php .jsp
        Require all granted
        AllowOverride FileInfo
</Directory>

 

아파치 서버 재시작

sudo /etc/init.d/apache2 restart

추가 보안 설정

vim /etc/apache2/conf-available/security.conf

주석의 내용을 참고해서 필요 옵션에 따라 주석(#)을 제거해서 설정을 활성화한다.

 

확장자보호

/etc/apache2/mods-available/php7.2.conf 파일 편집

<FilesMatch ".+\.ph(p3|p4|p5|p7|ar|t|tml)$">
    Require all denied
</FilesMatch>

추가하여 php 제외 문자열을 해석하지 않도록 한다.

 

데이터베이스 초기화 진행

/usr/bin/mysql_secure_installation을 통해 초기화한다.

 

추가적으로 많은 보안 설정이 있지만 공격실습을 위해 이정도 적용하고 설정을 마무리한다.

모의해킹 실습을 위한 Apache, php, MariaDB의 설치및 설정을 완료하였다.

 

로그정보

웹페이지의 개발 및 공격 실습을 하다보면 아파치 로그가 필요한 경우가 발생한다. PHP 코드에 에러메시지를 나타나게 할 수도 있지만 직접 로그를 참고하는 것이 더 빠르다.

apache2의 경우 로그는 다음 파일로 볼 수 있다.

access 로그

/var/log/apache2/access.log

tail -f access.log

 

error 로그

/var/log/apache2/error.log

tail -f error.log

반응형