몽고 DB 해킹 방지하기

김준엽·2022년 6월 22일
0

backend

목록 보기
2/2

AWS EC2에서 배포하고 있는 개인 프로젝트의 하나의 페이지가 어느 순간 데이터를 불러오지 못하고 있었습니다. 그래서 몽고 DB에 문제가 있다고 판단해 살펴보았습니다.

해킹을 당했습니다. 27017 포트에 모든 ip를 허용하고 계정 인증을 하지 않았서 누구나 DB에 접근 가능해서 이런 사태가 일어난 것 입니다.

그래서 해결 방법은 계정 인증 설정을 해주면 됩니다. 그 방법을 알아보겠습니다.

계정 인증 설정

먼저 mongoDB shell에 접속해서 계정을 만듭니다. 저는 간단하게 관리자 데이터베이스에 만들겠습니다. 비밀번호 복잡하게 만들어야 합니다. 간단하면 해킹 당할 수 있습니다.

$ mongo

> use admin
> db.createUser({
    user: 'username',
    pwd: 'password',
    roles: ['readWriteAnyDatabase']
})

계정을 성공적으로 만들었다면 성공했다는 메세지가 출력될 것 입니다.
아니면 show users로 확인하시면 됩니다.

계정 권한에 대한 설명하겠습니다.

  • readWriteAnyDatabase : local과 config를 제외한 모든 데이터베이스에서 readWrite와 동일한 권한과 클러스터 전체에 대한 listDatabases 권한
  • readWrite : 모든 비시스템 컬렉션 및 system.js 컬렉션의 데이터를 수정할 수 있는 권한

이 외에 다른 권한은 MongoDB의 인증과 권한를 참고하세요.

몽고db 설정 파일을 수정하기 위해 sudo로 실행합니다.

sudo vim /etc/mongod.conf

몽고db 설정 파일에 아래와 같이 수정합니다. security속성 밑에 띄어쓰기 2번 해야 합니다. tab하지 마시고 스페이스바 2번 해야 제대로 설정됩니다. security앞에 #을 제거합니다.

security:
  authorization: enabled

인증 설정이 완료되면 몽고db를 재시작합니다.

$ sudo systemctl restart mongod

shell에 접근해서 인증에 성공하면 1이 표시됩니다.

$ mongo

> use admin
> db.auth("<username>", "<password>" )
1

계정 인증 없이 db 명령어를 사용하면 접근이 되지 않습니다.

계정 인증된 몽고 DB URI 접속 시 아래와 같이 사용합니다.

mongodb://<아이디>:<비밀번호>@<ip>:27017/?authSource=admin
profile
프론트엔드 개발자

0개의 댓글