본문 바로가기

Study records/Linux server hacking

데이터베이스 해킹과 보안

데이터베이스와 연동할 때 데이터베이스 해킹하기

 

webshell.php 파일로 게시물을 보여주는 board_show.php 코드를 확인한다.

 

webshell.php 파일로 board_show.php 코드 확인

 

PHP와 데이터베이스 연동하기 위한 계정 정보는 Mysqli_connect()에 담기는데, 코드로 include된 dbconfig.php 파일에 계정정보가 있는 것을 확인할 수 있다.

 

 

데이터베이스의 네트워크 취약점을 활용해 해킹하기

데이터베이스에 방화벽이 설정되어 있지 않거나 데이터베이스의 통신 포트가 외부에 노출되어 접속 가능한 형태인 경우, 보안에 취약한 상태로 직접적인 공격을 받을 수 있다.

root로도 원격에서 접속할 수 있게 설정

 

 

데이터베이스 통신 포트가 열려 있는 경우 칼리에서 Hydra를 이용해 서버의 계정 정보를 탈취할 수 있다. passwd.txt 사전에 있는 문자열을 특정 계정으로 로그인 시도를 수행한다. 획득한 데이터베이스 계정 정보로 공격자가 원격에서 직접 데이터베이스에 접근하여 원하는 정보를 탈취하는 등 악의적으로 행동할 수 있다.

 

데이터베이스 해킹 사고 분석

대부분은 데이터베이스가 웹 서버와 연동된 상태에서 발생한다. 웹 서버 해킹 사고 분석의 웹 로그를 분석하거나 ModeSecurity와 같은 보안 모듈에서 탐지된 로그를 통해 확인할 수 있다. 이 외에 데이터베이스에 직접적으로 접근한 정보는 데이터베이스 접근 기록에 남는다. 우분투에서 MariaDB에 대한 로그는 /var/log/mysql/error.log에 남는다.

 

 

데이트베이스 보안

안전한 데이터베이스를 구축하기 위해 고려해야 할 요소로는 데이터베이스의 접근 통제, 데이터베이스의 통신 보안, 데이터베이스 가용성, 암호화 등이 있다.

 

① 데이터베이스 네트워크 보안 설정하기

방화벽 설정을 통해 데이터베이스를 사용하는 특정 포트만 네트워크에 접근할 수 있게 허용하고, 원격 접속을 하는 사용자 및 호스트를 제한하여 데이터베이스의 네트워크 보안을 강화한다.

 

서비스 포트인 TCP 3306번으로도 방화벽 허용 정책을 등록할 수 있는데, sudo ufw allow 3306/tcp 명령으로도 MariaDB 방화벽 허용 정책을 등록할 수 있다.

sudo ufw allow from [소스 IP 대역] to any port [포트] proto [프로토콜명]

 

② 데이터베이스의 사용자 접근 권한 설정하기

데이터베이스 관리자가 불필요하게 많은 권환을 갖고 있거나 허가되지 않은 관리자가 네트워크의 데이터베이스에 접근하게 되면 데이터가 쉽게 유출될 수 있다.

GRANT ALL PRIVILEGES ON *.* TO '아이디'@'네트워크 주소' IDENTIFIED BY '비밀번호'; 명령어를 통해 데이터베이스 사용자의 접근 권한을 설정한다.

 

③ 데이터베이스 이중화 구성하기

특정 데이터베이스가 서비스 거부 공격(DDoS)이나 해킹을 당해 데이터베이스에 장애가 발생해도 데이터베이스 서비스는 유지되어야 한다. 이를 위해 여러 대의 데이터베이스 서버를 구성하여 Master 서버(주 서버)가 Slave 서버(예비 서버)에 데이터를 실시간으로 복제해주는 데이터베이스 복제 기능 혹은 3대 이상의 서버로 구성하는 클러스터 기능을 사용한다.