본문 바로가기
허브 살리기 프로젝트

DB가 내부 망에 존재하는 이유

by jay-choe 2024. 2. 17.

 

회사에서 보는 데이터베이스와 AWS같은 클라우드 제공 업체에서 DB 관련 Manged Service에 익숙하게 살다 보면 참 기본적인건데 앗차 싶을 때가 있다.

 

데이터베이스들은 모두 내부망에 있다는 것이다.

(Public Ip를 할당 받고 접근 제어를 다 열지 않았다는 가정 하에 - AWS에서 이 옵션은 따로 선택해야 한다.)

 

즉 퍼블릭하게 공인 아이피를 타고 직접적으로 DB를 접근하는 것은 권장되지 않는 사항이라는 것이다.

 

근데 이 당연한 내용을 안 지키면 어떻게 되는지 가끔은 궁금하기도 하다.

 

 

 

경험

개인적으로 운영하려는 서버가 있다.

서버는 집에서 구동하는 On-Prem 방식이며 이 안에서는 MySQL이 돌고있다.

 

집 밖에서도 DB에 접근해서 개발할 필요가 있으면 하려고 3306 포트 접근을 직접 DB쪽으로 가도록 포트포워딩 설정을 해두었다.

 

그림을 그려보면 이런 구조가 된다.

 

 

 

 

이렇게 설정을 하고 간단한 테이블을 만들고 샘플 데이터를 몇개 넣어두었는데

어느날 갑자기 DB 접속이 안 되는 것이다. (이 당시에 다른 계정을 만들기 귀찮아서 root 계정의 접근 경로를 다 열었다)

 

이런 경험은 처음이었어서 뭐가 문제인지도 몰랐다. root 계정으로 접속 한 후에 확인을 하다가 이상한 것을 발견했다.

 

 

모든 데이터 + 계정 날라가있고 저런 내용의 데이터베이스만 덩그러니 남아있는 것이다.

 

 

스키마는 이런식인데 그냥 필드만 봐도..

 

비트코인주면 데이터베이스를 복구해준다는 것이다.

 

또 이메일 주소까지 보니 토르 브라우저를 쓰는걸로 보인다. 즉 추적같은 건 불가능 해 보인다.

 

하루도 안 된 사이에 발생한거라 binlog로 복구하면 되겠지 하고 binlog를 봤는데 binlog까지 지운걸로 보인다.

 

binlog 삭제까지 한 걸로 봐서는 root 계정이 탈취 되었다는 것을 확인 할 수 있었다.

 

비밀번호는 그래도 권장사항에 맞춰서 설정하였는데 (8글자, 특수문자 ,알파벳 대문자 포함)

8글자의 경우의 수를 모두 입력해서 뚫은 것으로 보인다.

 

상당히 경우의 수가 많을 것으로 보이는데

하나 걸리면 여러 워커들이 연산을 같이하나 싶기도 하다..ㅋㅋ;;

 

나는 셈플 데이터만 있어서 다행이지 중요한 데이터들이 있었으면 저기에 휘둘릴 것이다.

 

binlog까지 purge 하는 것은 진짜 어떻게 할 방법이 없게 만드는 것 같다. (이런거 만드는 사람들 참 똑똑한 것 같다)

 

 

대처방안

1. Well Know Port 사용하지 않기

가장 쉽게 3306같은 MySQL 기본 포트 말고 외부에서 들어오는 포트를 다른 포트로 지정 해주면 저런 스크립트성 공격은 모든 DB종류와 모든 포트를 스캔 하지는 않을 것으로 보여서 단순하게 33062 -> 3306 으로 포트 포워딩을 해주면 MySQL인지 아닌지 확인하는 것을 방어하지 않을까 생각된다. (모든 퍼블릭 IP를 대상으로 하는 것 같은데 모든 경우의 수를 매핑하는 행위를 했을 지 - 나 같으면 안 그랬을 것 같다는 생각이 든다.)

 

2. root 계정은 localhost에서만 접근 할 수 있게 + binlog 활성화

MySQL은 계정마다 접근 경로를 포함할 수 있게 되어있다.

 

'root'@'%' 와 같은 식으로 모든 접근 경로를 열지 않고 root 계정은 localhost만 사용할 수 있게 하면 시스템 관련 행위들은 (binlog 제거 같은) 방어할 수 있다.

 

추가적으로 binlog를 활성화 해두어서 설정 기간 범위의 작업을 복구할 수 있게 한다.

 

 

 

3. 내부 망에서만 접근 할 수 있게 제한하기

가장 기본적이면서도 귀찮은게 내부망만 사용하는 것 같다.

DB는 내부 망에서만 돌고 이 안에서 DB를 접근하게 한다면 외부에서 접근 하려면 중간에 외부와 이어주는 베스쳔 서버같은 서버를 통해서 접근한다면 DB는 보호 할 수 있을 것으로 보인다.

 

 

 

 

막상 당해보니까 좋은 경험인 건 맞는데 인터넷 상에서 스크립트를 돌리는 사람들이 조금 괘씸하기도 하다.

외부 접근 root 유저를 만들어서 read 만 가능한 계정을 만들어 둬서 조금 약올려 볼까 싶기도..

'허브 살리기 프로젝트' 카테고리의 다른 글

Image Resizing  (0) 2024.02.26
MySQL UTF8MB4  (0) 2024.02.19
CPU Pinning  (0) 2024.02.14
Connection Timeout Monitoring in Connection Pool  (1) 2024.02.11
Idle in ALB, Connection Pool  (1) 2024.02.07