개발 입문 6주 만에 DB 서버 해킹 당한 후기

whybein·2020년 3월 7일
25

단순 프로젝트를 위한 서버라도 쉬운 비밀번호로 하면 안 된다다는 것을 배웠습니다.

부트캠프 1차 프로젝트 마지막날, 발표를 앞두고 Kay님과 AWS RDS 서버에서 MySQL 테이블을 확인하고 있었는데 방금까지 조회되던 테이블이 갑자기 존재하지 않는다고 해서 읭?

이상하다 생각해서 전체 테이블 조회를 해보니 WARNING 테이블 하나만 덩그라니 남아있었습니다. 이게 무슨 상황이지 설마하며 테이블 내용을 보니

To recover your lost Database and avoid leaking it: Send us 0.06 Bitcoin (BTC) to our Bitcoin address 1BLYhUDmnmVPVjcTWgc6gFT6DCYwbVieUD and contact us by Email with your Server IP or Domain name and a Proof of Payment. If you are unsure if we have your data, contact us and we will send you a proof. Your Database is downloaded and backed up on our servers. Backups that we have right now: wefish . If we dont receive your payment in the next 10 Days, we will make your database public or use them otherwise. | 1BLYhUDmnmVPVjcTWgc6gFT6DCYwbVieUD | contact@sqldb.to

매우 친절하게 비트코인 주소, 이메일과 함께 0.06비트코인을 보내주면 DB 유실과 유출을 막을 수 있다는 안내문을 넣어놨습니다. sqldb.to 라는 도메인을 보니 전문 털이봇의 소행 같습니다. 처음 당하는 정말 어이가 없는 상황에 이런게 해킹이구나 싶었습니다. 프로젝트를 위한 DB였으니 양도 많지 않았고 백업본도 있긴 했으나 발표 준비 전에 이런 일이 생겨 부랴부랴 로컬로 다시 연결을 해야했습니다. 만약에 실제 서비스를 하는 DB였다면 정말 끔찍했을 상황입니다.

구글링 해보니 저와 비슷한 경험을 한 사례가 꽤 보였습니다. 해킹을 쉽게 당한 이유는 아래 세 가지였습니다.(gitignore를 통해 DB접속 정보를 웹에 올리지는 않았습니다.)

  • RDS 외부 접속 허용
  • MySQL 디폴트값 사용(유저네임과 포트번호)
  • 쉬운 비밀번호 사용(12345678, pass1234 등)

프로젝트성 DB라 외부 접속 허용으로 했지만 비밀번호만 다르게 했어도 쉽게 뚫리지 않았을 겁니다. 그리고 실서비스용 서버라면 유저네임 포트번호도 디폴트 값과 다르게 설정하는 것이 보안에 더 좋을 것 같습니다.

한편으로는 이제 갖 개발에 입문한 지금 이런 특별한? 경험을 했다는 것이 재미있기도 하고 지금부터 DB 보안에 관심을 갖게 되는 계기가 될 수도 있겠다는 생각이 들었습니다. 복구 작업을 진행할 수 있을지 모르겠지만 하게된다면 후속 내용도 기록해 보겠습니다.

profile
Back-End Developer

8개의 댓글

comment-user-thumbnail
2020년 3월 22일

해킹을 하신줄 알았는데...
'당' 하셨군요...

교훈 얻어갑니다.

답글 달기
comment-user-thumbnail
2020년 3월 23일

하필 비트를..

답글 달기
comment-user-thumbnail
2020년 3월 30일

ㅋㅋ저도 당했었는데 어차피 테스트로 돌리던거라 무시하고 진행했었네요

답글 달기
comment-user-thumbnail
2020년 4월 1일

주로 깃허브에 사용자DB Config파일도 같이 올려 놓으면, 그런 경우가 발생하더라구요...
경험으로 얻은 값진경험이었네요 ㅎㅎ

답글 달기
comment-user-thumbnail
2020년 4월 4일

실제 사용하는 서버였으면 정말 무서운 일이네요. 재밌는(?) 경험 잘 봤습니다.

답글 달기
comment-user-thumbnail
2021년 3월 11일

안녕하세요, 저희 mysql도 해킹을 당해서 보안 조취를 취하려고 하다가 이 글을 발견했어요.

MySQL 디폴트값 사용(유저네임과 포트번호)에 대해서 이해가 잘 가지 않아서 조금 더 자세한 얘기를 들려주실 수 있을까요?
mysql security 문서 ( https://dev.mysql.com/doc/refman/5.6/en/security-guidelines.html ) 에서는 포트번호 변경과 보안에 관련된 내용을 찾을 수 없는데요.

포트 번호 변경의 목적이 외부 접속을 막기 위함이라는 목적이라면 서버를 private 네트워크 안으로 숨기고 외부 접근을 firewall로 막으면 될 것 같은데, 이 것 말고도 신경써야 했던 부분이 있는것인지, 다른 목적으로 변경을 하신 것인지 궁금합니다.
포트번호를 변경하지 않은 것이 왜 해킹을 쉽게 당하는 이유가 되고, 조치를 어떻게 하신 것인지, 그렇게 하신 이유가 궁금합니다.

1개의 답글