ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Trouble Shooting] MongoDB가 해킹 당한 문제
    SSAFY(프로젝트)/1) relpl - Trouble Shooting 2024. 2. 12. 16:07

    1. 문제상황

     

    프로젝트 3주차쯤 별 생각없이 디비를 확인하던 도중 몽고DB의 모든 데이터가 사라져있고,

    살리려면 비트코인 지갑에 입금하라는 테이블 하나만 남아있는 것을 발견했다.

     

    다행인점은 아직 본격적으로 데이터를 넣기 전이라 유의미한 데이터는 없었다는 점 이다.

    이후 프로젝트를 진행하다보니 다른 조의 redis가 털렸다는 사실을 알게 되었고,

    괜히 불안해서 우리조의 redis도 다시 한번 점검하고, 패스워드를 설정하게 되는 계기가 되었다.


    2. 고민해본 내용

    사실 처음 디비를 털렸을 때 데이터가 사라진 것은 문제가 안되었지만,

    가장 걱정되었던 점은 인프라 담당자로서

    - 어디까지 털렸는지?

    - 어느정도의 조치를 취해야 하는지?

    두 가지가 가장 걱정되었던 것 같다.

     

    사실 서버의 키 파일(.pem)이 털렸다면 정말 큰일나지만, 그정도는 아닌 것 같고..

    아직도 의문인 점은 디비의 pw를 무작위 비밀번호 생성 사이트에서 만들었는데, 뚫렸다는 점 이다.

     

    코치분과 컨설턴트님과 얘기를 해보고 대책을 고민해본 결과 아래와 같은 결론이 나왔다

    1. 서버에 혹시 이상한 프로세스가 실행중인지 확인해보기

    2. 사용중인 DB를 전부 삭제하고 재설치하며 pw 설정하기

    3. DB의 포트를 Default 포트 대신 임의의 포트로 지정하기

    크게 세 가지가 나왔다.

     

    사실 프로젝트의 DB가 Redis, MongoDB, PostgreSQL 세 가지를 사용하고 이미 환경 구축이 끝난 상태라

    전부 재설치하는 결심을 하기도 힘들었지만 어쩔 수 없이 해야만 하므로 하기로 결심했다.

     


    3. 해결 방안

    MongoDB와 PostgreSQL은 기존에는 서버에 apt-get install로 설치한 데이터베이스라 DB의 기본값으로 지정된 포트를 변경하기가 번거로웠다.이를 해결할겸 redis는 이미 docker의 image로 설치되어있었으므로 세 개의 DB 모두 도커 이미지로 다운받아 설치했다.그래서 외부에서 접속하기 위한 포트 번호는 다르지만, 내부에서 실제 사용하는 포트는 DB의 기본 포트를 사용하도록 Docker run의 옵션에서 지정해주었다.

    docker run -d -p 1234:5432 -name postgres postgres:latest ...

     

    추가적으로 프로젝트를 관리하는 환경 변수들 즉 application.yml에서

    데이터베이스의 기본 정보를 제외한 ID, PASSWORD 모두를 암호화 하고 Jasypt로 암호화 했다.

    또한 포트번호와 Jasypt password는 인텔리제이 내부 환경변수로 등록해서 외부에서 볼 수 없도록 작성해두었다.

    spring:
      datasource:
        url: ENC(...)
        username: ENC(...)
        password: ENC(...)
        driver-class-name: org.postgresql.Driver
      data:
        mongodb:
          url: ENC(...)
          host: ENC(...)
          port: ${MONNGOPORT}
          database: ENC(...)
        redis:
          host: ENC(...)
          port: ${REDISPORT}
          password: ${REDISPWD}

    4. 느낀점

    다행히도 프로젝트 초기에 데이터가 많이 없을때 일어난 일이라 데이터 복원에 대한 걱정은 없었다.하지만 싸한 느낌을 받게 되어서 다음 프로젝트 때는 초기 환경 설정부터 아예 커밋 로그에 남지 않도록 환경 설정을 하는 것을 목표로 해야겠다.

    반응형

    댓글

Designed by Tistory.