honestfamily
프로젝트 일지 · 인사이트

랜섬웨어 복구 실패의 공통점: 백업이 없어서가 아니라 어느 백업이 깨끗한지 몰라서

카카오톡 상담 ↗

가격표 바로 보기 자주 묻는 질문 바로 보기

백업 30일치를 갖고 있었는데 복원하고 이틀 뒤에 또 잠겼다

랜섬웨어 피해를 입은 기업들의 이야기를 들어보면 공통적인 패턴이 하나 있습니다. 백업이 없어서 당한 게 아니라는 것입니다. 백업은 있었는데, 복원을 했는데, 며칠 뒤에 또 암호화됐다는 이야기가 생각보다 많습니다.

왜 이런 일이 생기는 걸까요?


랜섬웨어는 한순간의 사고가 아니라 몇 주짜리 작전입니다

화면이 잠기고 몸값 요구 화면이 뜨는 순간, 대부분의 사람은 그게 공격의 시작이라고 느낍니다. 그런데 실제로는 그 반대입니다. 화면이 잠기는 건 공격의 마지막 단계입니다.

그 앞에는 이런 단계들이 순서대로 일어납니다.

  1. 계정이나 취약점을 통해 일단 서버 안에 들어옵니다.
  2. 한동안 조용히 있으면서 권한을 높이고 네트워크를 파악합니다.
  3. 백업부터 찾아서 지웁니다. 백업이 살아 있으면 몸값을 낼 이유가 없기 때문입니다.
  4. 데이터를 외부로 복사합니다.
  5. 그러고 나서야 암호화하고 몸값을 요구합니다.

이 순서에서 두 가지 문제가 따라옵니다.

첫째, 데이터를 이미 빼내갔기 때문에 백업으로 잘 복구해도 협박이 끝나지 않습니다. 국내에서는 개인정보가 유출되면 인지한 날로부터 72시간 안에 신고 의무가 생깁니다. 복구 문제이기 전에 법적 신고 사안이 되는 셈입니다.

둘째, 침입자가 서버 안에 머무는 잠복 기간 동안 만들어진 백업에는 침입자가 심어둔 것들이 같이 들어 있습니다. 웹셸, 등록해둔 SSH 키, 새로 만든 계정 같은 것들이요. 그 백업을 그대로 복원하면 처음부터 다시 당합니다. 복원하고 이틀 뒤에 또 잠기는 게 바로 이 경우입니다.


백업의 조건은 '주기'가 아니라 이 네 가지입니다

많은 분들이 백업을 얼마나 자주 하느냐로 관리합니다. 그런데 실제로 중요한 건 주기보다 다음 네 가지입니다.

① 분리, 원본과 같은 공간에 두지 않기

같은 서버, 같은 디스크, 마운트해둔 네트워크 드라이브에 백업을 두는 건 분리가 아닙니다. 서버가 장악되면 백업도 같이 지워집니다.

S3 같은 외부 저장소로 보냈다면 한 가지를 더 확인해야 합니다. 그 서버 안에 S3에 접근하는 키가 들어 있고, 서버를 장악한 사람은 그 키도 같이 가집니다. 외부에 뒀는데 백업이 사라지는 경로가 바로 이겁니다.

② 삭제 권한 차단, 서버가 자기 백업을 지울 수 없게

서버에 넣는 키는 쓰기 전용으로 두는 것이 좋습니다. IAM에서 PutObject만 허용하고 DeleteObject와 DeleteObjectVersion은 막아두면 됩니다. 목록 조회 권한도 굳이 줄 필요가 없습니다.

한 단계 더 나아가면 S3 오브젝트 락을 컴플라이언스 모드로 설정하는 방법이 있습니다. 정해둔 기간 동안은 루트 계정으로도 지울 수 없습니다. 거버넌스 모드는 특정 권한을 가진 사람이 우회할 수 있어서, 진짜로 삭제를 막으려면 컴플라이언스 모드를 써야 합니다.

핵심은 한 줄입니다. 서버가 자기 백업을 지울 수 있으면, 그 서버를 장악한 사람도 지울 수 있다.

③ 보존 기간, 용량이 아니라 잠복 기간 기준으로

보존 기간을 7일, 30일 같은 기본값으로 두는 경우가 많습니다. 그런데 이 숫자는 디스크 용량이 아니라 침입 잠복 기간을 기준으로 잡아야 합니다.

보존이 30일인데 침입이 40일 전이었다면, 갖고 있는 백업 전부가 감염 이후 시점의 백업입니다. 되돌아갈 곳이 없어집니다.

세대를 나눠서 잡으면 용량을 감당하면서도 과거로 멀리 갈 수 있습니다. 일 단위 30일, 주 단위 12주, 월 단위 12개월 구성이 기준점으로 쓰기 좋습니다. 오래된 세대는 저렴한 스토리지 등급으로 내리면 됩니다.

④ 복원 검증, 백업 성공 로그는 복원이 된다는 증거가 아닙니다

덤프가 빈 파일로 떠 있거나, 압축이 깨졌거나, 암호화해둔 백업의 복호화 암호를 아무도 기억 못 하는 경우가 실제로 있습니다. 부주의해서가 아니라 평소에 확인할 계기가 없어서 생기는 일입니다.

분기에 한 번은 실제로 복원을 해보는 것이 좋습니다. 연습 없이 실제 사고를 만나면 백업 파일이 있어도 막막합니다.


이 네 가지를 다 해도 남는 질문, "어느 백업이 깨끗한가"

네 가지를 모두 챙겼더라도 대답하지 못하는 질문이 하나 남습니다.

"그래서 어느 백업을 써야 하나요?"

침입 시점을 모르면 90일치를 갖고 있어도 어느 걸 골라야 할지 모릅니다. 감으로 하나 골랐다가 그게 감염된 백업이면 처음부터 다시입니다. 그래서 탐지가 백업만큼 중요합니다.

다음 네 가지는 거창한 보안 도구 없이 현실적으로 적용할 수 있는 탐지 방법입니다.

배포 파일 무결성 확인, 배포 후에는 코드 파일이 바뀔 이유가 없습니다. 배포 시점에 파일 해시 목록을 만들어두고 매일 대조합니다. 웹 루트에 없던 파일이 생겼다면 그게 웹셸입니다. 어제 이후 수정된 파일만 추려보는 것만으로도 꽤 잡힙니다. authorized_keys에 추가된 공개키, 새로 생긴 크론잡, 새 계정, 새로 붙은 sudo 권한도 마찬가지입니다. 변화가 없어야 정상인 것들이 바뀌는 순간이 신호입니다.

압축률 모니터링, 암호화된 데이터는 압축이 되지 않습니다. 무작위에 가까운 데이터라 gzip이 줄일 게 없기 때문입니다. 매일 뜨는 백업 파일의 압축률을 보면 됩니다. 어제까지 크게 줄던 덤프가 오늘은 거의 안 줄었다면, 원본이 이미 암호화됐다는 뜻입니다. 구현은 두 줄이면 됩니다. 압축 후 크기를 압축 전 크기로 나누고, 어제 대비 편차가 임계치를 넘으면 알림을 보냅니다. 오늘 하나만 붙인다면 이걸 먼저 권합니다.

미끼 파일, 공유 폴더나 데이터 디렉터리에 아무도 건드리지 않는 파일을 심어둡니다. 랜섬웨어는 디렉터리를 훑으면서 전부 암호화하기 때문에 이 파일도 같이 건드립니다. 해시가 바뀌는 순간이 암호화가 시작된 시점입니다. 그리고 이 알림이 울렸을 때 가장 먼저 해야 할 일은 서버를 끄는 게 아니라 백업 잡을 멈추는 것입니다. 알림을 무시하고 그날 밤 정기 백업이 돌면 암호화된 파일로 멀쩡한 백업을 덮어씁니다. 이 순서는 문서로 적어두는 게 맞습니다. 사고가 나면 아무도 침착하지 않습니다.

하트비트 모니터링과 로그 보존, 침입자가 초반에 하는 일 중 하나가 로그를 지우고 알림을 끄는 것입니다. 알림이 안 오는 것도 경보여야 합니다. 매일 오던 "백업 정상" 메시지가 오늘 안 왔다면 그 자체를 이상 신호로 처리하는 구조가 필요합니다. 로그 보존 기간도 백업 보존 기간과 같게 맞춰두는 것이 좋습니다. 백업은 90일치인데 로그가 7일뿐이라면 침입 시점을 특정할 수가 없고, 결국 어느 백업이 깨끗한지 감으로 골라야 합니다. 로그는 서버 밖으로 내보내야 합니다. 서버 안에만 있으면 같이 지워집니다.


복원은 되돌리기가 아니라 다시 짓기입니다

급할 때 가장 자연스러운 선택이 서버 전체 이미지를 통째로 되돌리는 것입니다. 그런데 그렇게 하면 침입자가 심어둔 것도 같이 되돌아옵니다.

원칙은 이렇습니다. 인프라는 다시 짓고, 데이터만 복원합니다. 서버는 깨끗한 이미지로 새로 올리고, 코드는 저장소의 검증된 태그에서 배포합니다. 백업에서 가져오는 건 데이터베이스 덤프와 업로드 파일뿐입니다.

업로드 파일은 한 번 더 주의가 필요합니다. 사용자가 올린 파일 중에 웹셸이 섞여 있을 수 있어서, 복원할 때 그 디렉터리는 실행 권한을 막고 올리는 게 좋습니다.

그리고 자주 빠뜨리는 게 인증 정보 전량 교체입니다. 그 서버에 있던 건 전부 유출된 것으로 봐야 합니다. 환경변수, DB 비밀번호, API 키, SSH 키까지는 대부분 교체하는데 세션과 토큰 서명 키를 빠뜨리는 경우가 있습니다. 이걸 바꾸지 않으면 침입자가 가져간 세션이 새로 만든 서버에서도 그대로 유효합니다.

Laravel을 쓴다면 추가로 확인할 것이 있습니다. 앱 키를 교체하는 순간 그 키로 암호화해서 DB에 저장해둔 컬럼도 함께 읽히지 않습니다. 키 교체 계획에 해당 컬럼 재암호화까지 같이 포함시켜야 합니다.


오늘 확인해볼 수 있는 7가지 항목

아래 항목 중 "모르겠다"가 나오는 게 있다면 그게 먼저 챙겨야 할 지점입니다.

  1. 서버에 있는 백업 키로 백업을 삭제할 수 있는 상태는 아닌가
  2. 침입 시점을 소급해서 알아낼 수 있는가
  3. 로그 보존 기간이 백업 보존 기간과 같고, 로그가 서버 밖에 보관되어 있는가
  4. 배포된 코드에 없던 파일이 생기면 알 수 있는가
  5. 마지막으로 실전처럼 복원을 연습해본 적이 있는가
  6. 백업 파일의 크기나 압축률이 갑자기 변하면 알림이 오는가
  7. 암호화가 시작됐을 때 백업 잡부터 멈추는 절차가 문서로 있는가

7개 전부 갖춰진 곳은 드뭅니다. 하나만 먼저 한다면 6번, 압축률 알림을 추천합니다. 구현 비용이 가장 낮으면서 가장 이른 시점에 신호를 줍니다.


이 내용을 영상으로 보고 싶다면 아래 유튜브 링크에서 확인하실 수 있습니다. 각 탐지 방법의 구체적인 구현 방식까지 자료화면과 함께 정리해뒀습니다.

▶ https://youtu.be/ryiqMPWtAAM


서버 백업 구조나 인프라 설계를 새로 검토하고 있다면, 현재 운영 방식에서 어떤 부분이 빠져 있는지부터 함께 정리해드릴 수 있습니다. 부담 없이 현재 상황을 먼저 말씀해 주세요.

→ https://honest-family.com

가격표와 자주 묻는 질문

어니스트패밀리는 만드는 것에 따라 가격이 정해져 있습니다. 기획, 디자인, 개발, 출시가 모두 들어 있고 부가세만 별도입니다.

만드는 것가격기간
소개 홈페이지100만 원1개월 안
MVP, 프로토타입300만 원1개월 안
상용화 서비스(웹, 앱)500만 원부터1~2개월
기존 DB 이전을 포함한 리뉴얼1,000만 원부터3개월 안팎
  • 소개 홈페이지에 스크롤과 마우스에 반응해 움직이는 고급 인터랙션을 넣으면 150만 원입니다.
  • 상용화 서비스와 리뉴얼은 넣을 기능과 옮길 데이터를 문서로 정리해, 계약 전에 금액을 정해 드립니다.
  • 유지보수는 간단한 수정 월 10만 원, 건바이건 견적 협의(보통 건당 40만 원 안쪽), 수정과 추가 개발 무제한 월 150만 원 중에 고르시면 됩니다.
  • 출시 후 1년 동안 생긴 오류는 무상으로 고쳐 드립니다.

가격과 비용

표에 적힌 가격이 정말 전부인가요?

네. 적힌 가격에 기획·디자인·개발·출시가 모두 들어 있고, 부가세만 별도입니다. 상용화 서비스와 리뉴얼처럼 '부터'로 적힌 가격은, 넣을 기능과 옮길 데이터를 문서로 정리해 계약 전에 금액을 정해 드립니다. 도메인·서버 이용료나 결제 수수료처럼 바깥 서비스에 내시는 돈은 고객님 명의 계정에서 실제로 쓰신 만큼만 나가며, 저희가 붙이는 금액은 없습니다.

기획비나 디자인비가 따로 드나요?

아니요. 계약 전 미팅과 기능 정리, 계약 후 기획과 디자인까지 모두 가격 안에 들어 있습니다.

만든 뒤에 매달 드는 돈도 있나요?

두 가지가 있습니다. 서버·도메인 같은 이용료는 고객님 계정에서 실제로 쓰신 만큼만 나가고, 고치거나 더할 일이 생겨 유지보수를 맡기시면 그 요금이 듭니다. 유지보수는 필요하실 때만 고르시면 되고, 다른 곳에 맡기셔도 됩니다.

유지보수비는 얼마인가요?

세 가지 중에 고르시면 됩니다. 글자 수정이나 팝업·배너 교체 같은 간단한 수정은 월 10만 원입니다. 필요할 때마다 한 건씩 맡기시면 건바이건으로 견적을 협의하는데, 일의 규모에 따라 금액이 천차만별이라 그때그때 정하는 점 양해 부탁드립니다. 보통 한 건에 40만 원 안쪽입니다. 수정과 추가 개발을 무제한으로 맡기시려면 월 150만 원입니다. 일이 생길 때마다 견적을 따로 받을 필요 없이, 기획부터 디자인·개발까지 한 팀이 서비스를 계속 맡아 관리합니다.

어디까지가 간단한 수정이고, 어디부터 추가 개발인가요?

있는 화면에서 글자를 고치거나 팝업·배너를 바꾸는 일은 간단한 수정입니다. 없던 페이지를 새로 만들거나 없던 기능을 더하는 일은 추가 개발이고, 건바이건으로 맡기시거나 월 150만 원 무제한 요금으로 맡기실 수 있습니다.

제가 만들려는 게 어느 가격에 해당하는지 모르겠어요.

상담에서 만들고 싶은 것을 들어 보고 바로 말씀드립니다. 먼저 써 보며 확인할 첫 버전(MVP·프로토타입)인지, 실제 고객을 받아 운영할 서비스인지, 지금 쓰는 서비스를 기존 데이터까지 옮겨 새로 만드는 리뉴얼인지에 따라 정해집니다.

'500만 원부터'나 '1,000만 원부터'는 어떻게 정해지나요?

상용화 서비스는 넣을 기능에 따라, 리뉴얼은 옮길 데이터의 양과 지금 쓰는 기능에 따라 달라집니다. 상담에서 들은 내용으로 넣을 기능과 옮길 데이터를 문서로 정리하고, 그 문서와 함께 금액을 말씀드립니다. 계약은 그 금액을 보시고 정하시면 됩니다.

이 가격에 어떻게 만들 수 있나요?

여러 서비스에 공통으로 들어가는 기능은 저희가 직접 만들어 다듬어 온 공통 모듈을 씁니다. 개발 도구도 예전보다 좋아져서, 같은 결과를 훨씬 적은 비용으로 만들 수 있게 됐습니다. 대신 검수는 줄이지 않습니다. 단계마다 검수를 통과해야 다음 대금을 받습니다.

진행과 기간

어떤 과정으로 진행되나요?

미팅에서 만들고 싶은 것을 듣고, 넣을 기능을 문서로 정리해 보여드립니다. 계약하신 뒤에는 기획, 디자인, 개발과 검수, 출시 순서로 진행하고, 단계마다 결과물로 확인하신 뒤 다음으로 넘어갑니다.

기획서가 있어야 하나요?

없어도 됩니다. 만들고 싶은 것을 말씀해 주시면, 저희가 여쭤보면서 정리해 문서로 만들어 드립니다.

저희는 무엇을 준비하면 되나요?

미팅 시간만 내 주시면 됩니다. 대단한 걸 준비하실 필요 없이, 만들고 싶은 게 무엇인지 이야기 나누면 저희가 이끌어 드립니다. 나눈 이야기는 문서로 정리해 보여드리고, 검토하신 뒤 보충할 부분은 다시 이야기해 채웁니다.

만드는 데 얼마나 걸리나요?

요구사항에 따라 다르지만, 기능이 많지 않으면 1개월 안에 끝납니다. 복잡한 기능이 많아도 보통 2개월이면 되고, 운영하던 서비스를 리뉴얼하면서 기존 데이터까지 옮긴다면 3개월 정도 걸립니다. 결제사 심사처럼 바깥에서 정하는 일정은 미리 말씀드립니다.

대금은 어떻게 내나요?

세 번에 나눠 내십니다. 계약할 때 착수금 30%, 기획과 디자인이 끝나 검수를 통과하면 30%, 개발까지 끝나 검수를 통과하면 나머지 40%입니다.

소개 홈페이지 시안이 마음에 안 들면 어떻게 하나요?

시안을 보고 마음에 안 드시면 위약금 없이 취소하실 수 있습니다. 결정은 시안을 본 다음에 하셔도 됩니다.

결과물과 계약

만든 디자인과 소스코드는 누구 것인가요?

모두 고객님 것입니다. 대금을 다 내시면 이 프로젝트로 만든 기획·디자인·소스코드·데이터베이스의 소유권과 지식재산권이 고객님 회사에 넘어갑니다. 서버·도메인·결제 계정도 처음부터 고객님 회사 명의로 만듭니다.

나중에 다른 개발사에 맡기거나 직원이 직접 고쳐도 되나요?

네, 제한이 전혀 없습니다. 소스코드와 데이터베이스 구조, 서버 설정과 배포 방법, 관리자 계정을 모두 넘겨 드립니다. 별도 라이선스가 필요한 기능은 쓰지 않아서, 계약이 끝난 뒤 저희에게 내실 이용료도 없습니다. 저희가 원래 갖고 있던 기술과 공통 모듈은 권리를 저희가 갖되, 이 서비스에 들어간 범위에서 계속 쓰실 수 있습니다.

아임웹처럼 제가 직접 화면을 고칠 수 있나요?

아임웹 같은 사이트 빌더처럼 화면을 끌어다 바꾸고 기능을 붙이는 편집기는 없습니다. 처음부터 직접 만드는 서비스이기 때문입니다. 대신 소스코드가 모두 고객님 것이라, 내부 직원이나 다른 개발사가 제한 없이 고칠 수 있습니다.

하자가 생기면 어떻게 하나요?

완공하고 1년 동안 생긴 오류는 무상으로 고쳐 드립니다.

보안은 어떻게 처리해 주나요?

따로 정하신 보안 기준이 없으면 개인정보 보호법 기준으로 만듭니다. 권한별 접근 제한, 비밀번호 암호화, 보안 연결(https) 같은 기본 조치를 넣고, 출시할 때 기본 보안 설정까지 마칩니다. 더 높은 기준이 필요하시면 미팅에서 정해 반영합니다.

이런 걱정이 있다면

기존 개발사가 실패한 프로젝트인데, 이번엔 괜찮을까요?

어떤 문제 때문에 실패했는지 말씀해 주세요. 그 문제부터 해결할 수 있다는 걸 먼저 보여드리고, 그다음에 계약을 이야기하셔도 됩니다. 편하게 미팅을 요청해 주세요.

무엇을 만들어야 할지 저희도 자세히 모르는데, 이끌어 주실 수 있나요?

물론입니다. 저희는 매년 14개 안팎의 프로젝트를 만들고, 만든 뒤 운영과 유지보수까지 해 왔습니다. 그래서 운영까지 생각해 이끌어 드릴 수 있습니다. 목표와 고객을 말씀해 주시면 여러 번 미팅하며 깊이 이야기 나누고, 넣을 기능을 정리해 구체적으로 보여드립니다. 보시고 보충할 건 보충해서, 최종본을 보고 계약을 정하시면 됩니다. 직접 써 보면서 정하고 싶으시면, 꼭 필요한 기능만 넣은 MVP·프로토타입(300만 원)부터 만들어 보셔도 됩니다.

가격 정찰제로 운영합니다. 소개 홈페이지 100만 원, MVP, 프로토타입 300만 원, 상용화 서비스 500만 원부터, 기존 DB 이전을 포함한 리뉴얼 1,000만 원부터이고 부가세만 별도입니다. 출시 후 1년 동안 생긴 오류는 무상으로 고쳐 드립니다.

진행 중인 프로젝트나 지금 고민되는 문제를 편하게 들려주세요. 무엇을 만들지 아직 정해지지 않았어도 괜찮습니다.

가격표 자주 묻는 질문 카카오톡 상담
어니스트패밀리

Let’s make it real.

당신의 다음을,
함께 만들어볼까요?

기획서가 없어도 괜찮아요. 지금의 고민부터 들려주세요.

프로젝트 이야기하기

Let’s make it real.

무료검토 신청

필요한 서비스와 지금의 상황을 들려주세요.
개발자 출신 대표가 직접 검토하고, 영업일 24시간 내 회신드립니다.

글로 남기기 어려우시면 카카오톡으로 상담하세요 ↗

01프로젝트 담당자
02진행 가능 예산 · 선택

정확한 금액이 아니어도 괜찮습니다. 미정, 정부지원사업은 직접 입력해주세요.

03전달사항 선택
04첨부파일 선택

    보내주신 내용은 상담 검토에만 사용합니다.