[DB 해킹] MySQL DB 털린 썰 풉니다 (RECOVER_YOUR_DATA)

2024. 12. 23. 20:51·백엔드

배경

프로젝트 수행 중, 팀원의 알림을 받았다!

 

🙋‍♀️프론트엔드에서 API 요청 날렸는데, 에러가 뜨네요 ~ 

 

EC2에 평화롭게 접속해 서버 로그를 확인하니..

DB에 문제가 있는 것을 발견했다

 

mysql에 접속해 로그를 살펴보니

없다!

DataBase가 없다!

 


DB 해킹

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| RECOVER_YOUR_DATA  |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

 

RECOVER_YOUR_DATA 가 뭐지? 

 

mysql> use RECOVER_YOUR_DATA;
mysql> select * from RECOVER_YOUR_DATA;

+--------------------------------------------------------------------------------------+
| text                                                                                 |
+--------------------------------------------------------------------------------------+
| All your data is backed up.                                                          |
| You must pay 0.0084 BTC to bc1qnalw529tvk33ltttn5sjww6s8q5szppl79a868                |
| In 48 hours, your data will be publicly disclosed and deleted.                       |
| (more information: go to https://is.gd/yotuqu) |                                     |
| After payment send mail to us: dzen+22wlf@onionmail.org                              | 
| and we will provide a link for you to download your data.                            | 
| Your DBCODE is: 22WLF                                                                |
+--------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

 

🤷‍♀️ 비트코인 ? 디코드 ? 

그렇다 .............. 해킹당한 것이다 ....


대처

1. DB 해킹된 이유

1. root 계정, 비밀번호 1234 사용 (개발 진행중)

2. DB가 모든 IP에 대해 열려있다 

 

2. 개발환경

  • AWS EC2 (Amazon Linux 2023)
  • MySQL (Version 14.14)
  • Docker (Server Version  25.0.6)

 

3. 대처

(0. 최대한 빠른 팀원에게의 알림)

🙇‍♀️죄송합니다 프론트엔드분들 .... 빨리 서버 복구하겠습니다

 

다행히 개발 진행 중이었고, release도 나오지 않았다.

DB에는 테스트 더미 데이터만 존재했다 

(정말, 정말 다행이다.)

 

 

1. DB 완전삭제 이후 재설치

다른 블로거의 글을 참고해 MySQL을 완전삭제했다.

$ yum remove -y mysql-community-*
$ rm -rf /var/lib/mysql
$ rpm -e mysql80-community-release

$ find / -name 'mysql*rpm' # 삭제할 파일
$ rm -fr (바로 위에 찾은 파일 경로)

 

 

2. MySQL에 접속 IP 제한 (외부 접속 x)

EC2에서만 MySQL이 접속 가능하도록, 즉 내부 접속만을 허용해주었다.

 

보안그룹은 외부 접속에 대한 규칙이므로

3306 포트 (0.0.0.0) 를 삭제했다!

보안그룹 중 3306 포트 (MySQL) 삭제

 

 

3. DB 비밀번호 수정

Strong한 비밀번호를 설정해주었다.

$ mysql -u root -p 

SET GLOBAL validate_password_policy = 'STRONG';
SET GLOBAL validate_password_length = 16;
SET GLOBAL validate_password_mixed_case_count = 2;
SET GLOBAL validate_password_number_count = 2;
SET GLOBAL validate_password_special_char_count = 2;

ALTER USER 'root'@'localhost' IDENTIFIED BY '(비밀번호)';

 

16자 이상, 대소문자 2자 이상, 숫자 2자 이상, 특수문자 2자 이상으로 설정해,

다시 비밀번호를 설정할 때에도 복잡하게 하도록 설정했다.


여담

아쉽다. 비슷한 블로그를 보니

침착하게

var/log/mysql/error.log를 통해 로그를 확인하고, 어떤 IP에서 접속했는지 확인했어야 했다.

 

해당 블로그를 더 살펴보니

$ mysqlbinlog /var/lib/mysql/binlog.0* > binlog.sql

명령어로 MySQL 서버 기록을 복구할 수 있다고 한다!

(흥미롭다)

 

 

또,

개발 진행 중이니, 간단한 비밀번호를 설정해 편하게 썼었다. (1234)

아뿔싸, IP, Port를 열어두었다면 반드시 보안을 신경써야 겠다고 반성했다.

 

DB 백업이나, DB 암호화도 고려해 DB에 대한 더 많은 보안 요소를 고려하고

백엔드 코드에서도 보안 요소를 고려해봐야겠다!


참고자료

CentOS MySQL 완전삭제 https://heeseong.co.kr/entry/CentOS7-mysql-80-완전-삭제

 

비슷한 문제를 겪은 블로그 https://hyotatofrappuccino.tistory.com/49

'백엔드' 카테고리의 다른 글

[스프링부트] 디스코드 웹훅 (2) - API call 알림 (Interceptor, FeignClient)  (0) 2025.01.10
[스프링부트] 디스코드 웹훅 (1) - 에러 로그 전송 (logback)  (1) 2025.01.07
MySQL 연결 - characterEncoding=utf8mb4 쓰지 마세요!  (0) 2024.12.12
[스프링부트] Soft delete 구현  (1) 2024.12.09
[스프링부트] Spring Batch와 적용방법  (3) 2024.12.09
'백엔드' 카테고리의 다른 글
  • [스프링부트] 디스코드 웹훅 (2) - API call 알림 (Interceptor, FeignClient)
  • [스프링부트] 디스코드 웹훅 (1) - 에러 로그 전송 (logback)
  • MySQL 연결 - characterEncoding=utf8mb4 쓰지 마세요!
  • [스프링부트] Soft delete 구현
KyuminKim
KyuminKim
컴퓨터공학과 학생의 이모저모 개발 일지 📝
  • KyuminKim
    이모저모
    KyuminKim
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • 프로젝트 (2)
        • first-blog (2)
      • 클라우드 (22)
        • 도커 (14)
        • 쿠버네티스 (5)
        • AWS (2)
      • 알고리즘 (5)
        • 코드트리 (0)
        • 프로그래머스 (5)
      • 백엔드 (8)
      • 프론트엔드 (2)
      • 보안 (3)
        • 드림핵 (2)
      • python (3)
      • 네트워크 (1)
      • 기타 (6)
        • 2025 프로펙트 부트캠프(1차) | 클라우드 엔.. (0)
        • OSSCA | 2024 오픈소스 컨트리뷰션 아카데.. (0)
        • WIK (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    character_set_server
    docker
    인코딩
    도커
    쿠버네티스
    도커파일
    주간레포트
    코딩테스트
    고랭
    파이썬
    티스토리챌린지
    코딩트리조별과제
    cannot send an empty message
    DB
    자료구조
    코드트리
    EC2
    apiserver-runtime
    알고리즘
    2024 당근 테크 밋업
    MySQL
    characterencoding
    urf8
    진단평가
    amazonlinux
    오블완
    코드트리조별과제
    DP
    탈퇴구현
    recover_your_data
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
KyuminKim
[DB 해킹] MySQL DB 털린 썰 풉니다 (RECOVER_YOUR_DATA)
상단으로

티스토리툴바