프로젝트 DB를 해킹 당했다.

·2024년 5월 4일
28
post-thumbnail
post-custom-banner

서론

배포한 프로젝트가 제대로 운영되고 있는지 확인하는 중, 서버에서 에러가 나는 것을 목격했다.
원인을 찾아보니, DB에 현재 찾는 테이블이 존재하지 않는다는 에러가 나타나고 있었다.

개발자가 배포한 서비스의 테이블을 지울 일이 뭐가 있겠는가... 무슨 일인가 싶어DB를 자세히 확인해보니, 본래 사용하던 테이블들은 온데간데 없고, 이상한? 테이블만 하나 떡하니 자리잡고 있었다.

RECOVERY_YOUR_DATA

처음에는MY_SQL 내에서 자체적으로 회복기법이라도 적용시켰나 싶었다. 혹시나 하는 마음에 SELECT 쿼리로 테이블 데이터를 확인해본 결과, 심상치 않는 내용이 담겨 있었다.

0.0125 BTC 를 48시간 내로 보내라. 그럼 데이터를 돌려주지.

돈을 보낼 생각은 추호도 없지만, 그래도 얼마정도나 하는지 조회는 해봤다.

100원도 없는 취준생에게 100만원이라니, 제정신이 아님이 틀림없다.
돈은 없으니 개발자로서 내 경험과 지식으로 문제를 해결해보자. 기존 서비스를 복구하기 위한 시도 절차를 진행해보았다.

접근 과정 확인하기

외부 경로를 확인해본 결과, 원격으로 mysql 에 수차례 로그인 하려는 이력을 확인했다.
해킹 과정을 고민해보았을 때 대충 이런 시도 였을 것이라 추측했다.

1. 프로젝트는 프리티어를 이용 중이며, DB 와 server 가 하나의 공간에 있다.
2. DB의 경우, mysql의 기본 포트인 3306 포트를 사용했다.
3. 해당 3306 포트에 대한 인바운드 규칙은 모든 ip의 요청을 허용한다.
4. DB의 id의 경우 root를 사용했으며 비밀번호도 매우 쉽게 설정했다.
5. 해커는 무작위적으로 아무 ip로 누구나 다 사용할 법한 id와 password를 통해 3306 포트로 접근을 시도한다. 
6. 요청이 연결된 DB가 있다면, 해당 DB 의 테이블이 모두 삭제시켜버리고, 돈을 요구하는 데이터를 남긴다.

즉, 해당 이슈에서 문제가 되는 부분은, DB로 접근하는 모든 IP에 대한 요청 허용과, mysqlID, PW가 간단했다는 것이었다.

문제 해결하기

그나마 불행 중 다행이라고 할 수 있는 부분은 혹시나 프로젝트에 문제가 발생했을 때 다시 살릴 용도로 초기 데이터를 파일형태로 백업해두었다는 것이다.

새롭게 테이블을 생성하고, 해당 파일을 테이블에 import 하였다.

이러한 사태를 위해 서비스 운영 시 주기적인 데이터 백업을 하나보다.

또한 타 PC 에서의 외부 접근을 막기 위한 조치를 취했다. 3306 에 대한 인바운드 규칙을 현재 사용 중인 ec2 ip개발 환경 ip 에서만 접근이 가능하도록 설정했다.

더불어 기존 pw 를 영문, 숫자, 특수문자를 혼합하여 10자리 이상으로 늘려, 어지간히 많은 연산을 돌리지 않으면 찾기 어려운 pw 로 변경시켰다.

결론

영화에서나 볼 법한 일들이 실제로도 일어난다는게 놀라웠다. 사이드 프로젝트 였고, 파일을 백업해두었으니 쉽게 해결했지, 만약 이게 실제 이익을 창출하는 서비스였다면 얼마나 큰 손실이 발생했을지 모른다.

보안에 대해 더 신중해졌다는 점에서 오히려 좋은 경험이었나 하는 생각도 든다.

따봉해커야 고마워!

profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.
post-custom-banner

3개의 댓글

comment-user-thumbnail
2024년 5월 10일

허...저와 동일한 해커친구네요ㄷㄷ 썸네일만 보고 제 포스팅인줄 알았습니다ㅋㅋ(https://velog.io/@bckim9489/Bandit-Level-28-Level-29)

답글 달기
comment-user-thumbnail
2024년 5월 11일

무섭네요ㅋㅋㅋㅋㅋ 조심해야겠어요

답글 달기
comment-user-thumbnail
2024년 5월 17일

긍정적인 마인드 좋습니다¡ ㅋㅋㅋ 성장을 위한 해커의 소중한 기여였네요

답글 달기