데이터베이스 해킹 방지 방법

조회수 1851회

안녕하세요.

aws 인스턴스에서 mysql, mongodb를 운영하고 있습니다. 보안관련 조치를 하나도 취하지 않아서 이번에 해킹당해버렸습니다. 어쩐지 요청을 보내도 데이터가 안뜨더라구요. 이런 메시지가 남 일인줄 알고 보안에 신경을 전혀 안썼습니다.

To recover your lost Database and avoid leaking it: Send us 0.1 Bitcoin (BTC) to our Bitcoin address 13v9FopTUNbVvsjPx3eRyNnfUJXJUWHEm7 and contact us by Email with your Server IP or Domain name and a Proof of Payment.  

혹시 해킹을 막는데 각 db별로 계정 권한설정 말고 다른 전략이 있는지 알 수 있을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 일단 질문자와 같은 시나리오라면...

    aws 인스턴스라는 것이 ec2 를 의미하는 것이겠고...ec2 인스턴스에 mysql, mongodb를 개별설치하여 운영중이라고 이해가 됩니다.

    우선 해킹의 종류도 다양함으로 원인을 찾는 것이 중요합니다.

    sql injection 에 의한 것이라면 어플케이션의 문제이므로 aws와는 무관합니다.

    sql injection 은 어플리케이션의 결함이므로...pass하구요

    기본적으로 데이터베이스는 public 으로 노출되어 있으면 안됩니다. 인터넷에서 접근할 수 없어야 합니다.

    mysql이 설치된 ec2는 필히 private subnet에 두어야 하며 해당 인스턴스에 접속이 필요하다면 public subnet 에 설치되어 있는 bastion 서버(ec2 인스턴스)를 통해서 접속해야 합니다.

    httpd 가 설치된 ec2 는 security group 에서 꼭 필요한 포트(80, 443)만 오픈해야 합니다. 22번 같은 경우(bastion 서버 포함)는 질문자 pc만 접속할 수 있도록 network acl에 xxx.xxx.xxx.xxx/32 를 설정합니다.

    aws 에서 웹어플리케이션 보안(웹방화벽)을 위한 aws waf 서비스가 제공됩니다. waf 를 이용하여 sql injection 도 어느정도 방어할 수 있습니다. 패턴을 등록하여 막아낼수는 있습니다. 그러나 이건 차선이겠죠.

    또한 root access key 같은 것이 노출되었을 수 있습니다. ec2 내에서 access key 를 관리하고 있다면...삭제하고 ec2의 iam role 을 사용하여 사용하시기 바랍니다.

    그리고...어플리케이션의 설정파일 혹은 소스에 mysql 의 id/password 를 저장하고 있다면 이것도 aws secret manager 서비스를 사용하여 id, password 를 보관하고 필요시(어플리케이션이 db에 접속할때)에 조회해서 사용해야 합니다.

    개인적으로 추천하는 조합은 mysql 은 rds(rds의 mysql)를 이용하고 mongodb는 dynamoDB를 이용하면 인프라 업무를 많이 줄일 수 있습니다.

    • 안녕하세요. 답변 감사합니다. 1. 인스턴스 내부에서 포트를 꼭 필요한 포트만 열어야 한다. 2. waf 서비스를 이용해야 한다. 3. 접근키를 삭제하고 재생성해서 사용해야 한다. 이렇게 3가지군요. 알 수 없는 사용자 2019.5.9 10:50
    • 2는 돈아끼려고 rds, ec2 없이 라이트세일을 쓰는중인데요. 여기에 관한 질문입니다. aws가 한글로 떠서 잘모르겠습니다만 라이트세일 인스턴스 설정에 있는 방화벽이 waf가 맞는지 알 수 있을까요? 알 수 없는 사용자 2019.5.9 10:52
    • 중요한 핵심들을 놓치시고 계시네요...서브넷을 public, private 로 분리하고 ec2 도 httpd 가 설치되는 것과 mysql 이 설치되는 것 분리해야 합니다. ec2 하나에 mysql, httpd 다 넣고 인터넷에 공개한다는건...보안에 취약할 수 밖에 없습니다. 정영훈 2019.5.9 11:08
    • 그리고 waf 는 api gateway나 cloudfront(cdn) 와 함께 사용해야 합니다. lightsail 하고는 관계가 없고 필요하면 추가해서 사용하면 됩니다. 정영훈 2019.5.9 11:20
    • 답변 감사합니다. public, private 서브넷을 구성할 수 있게 해주는게 aws에는 vpc가 있군요. 1. api gateway와 vpc가 비슷해보이는데 맞는지 알고 싶습니다. 2. ssh터널링을 사용하란 오키에서 들었는데 비용면에서 어떤게 더 간단할까요. 알 수 없는 사용자 2019.5.9 12:57
    • api gateway 와 vpc 는 전혀 다른 서비스입니다. api gatewat는 http api 형태로 서비스를 만들어야 할 때 사용합니다. 구체적인 예로 주소찾기 서비스로 json 을 리턴하는 api를 만들 수 있겠습니다. vpc 는 가상의 네트워크입니다. aws에서는 디폴트 vpc 하나와 각 가용영역당 기본 서브넷이 생성되어 있습니다. 그리고 ssh 터널링이 bastion 서버를 통해서 접속하라는 것과 동일한 이야기입니다. "bastion ssh" 두단어로 구글링해보시기 바랍니다. 정영훈 2019.5.9 21:56
    • 정성스럽게 힌트까지 주셔서 감사합니다. 알 수 없는 사용자 2019.5.9 22:22

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)