Amazon S3 와 같은 클라우드 스토리지로 전송되는 파일에 대해 악성 소프트웨어를 검출해주는 Cloud One File Storage Security!!

이번 블로그에서는, AWS, Azure 와 같은 클라우드 스토리지의 파일에 대해 악성 소프트웨어가 있는지 검출을 해주는 서비스인 Cloud One File Storage Security에 대해서 소개합니다. Cloud One File Storage Security란 어떤 서비스인지 소개 후, 간단한 구축 실습을 하는 내용을 다루고 있습니다.
2022.04.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요, 클래스메서드 MAD 사업부의 정현재입니다.

여러분들이 Amazon S3에 올린 파일이 만약 바이러스를 가지고 있다면 어떤 일이 일어날까요?? 파일이 S3에 올라가있는 것만으로는 딱히 영향이 없을 것입니다. 하지만 그 파일을 다운로드 받게 된다면 다운로드 받은 기기가 바이러스의 공격을 받을 가능성이 있습니다. 만약, 유저들이 S3에 파일을 업로드 하고 다운로드 받을 수 있는 애플리케이션에서 악의를 가진 유저가 바이러스가 있는 파일을 올리게 된다면 그 파일을 다운로드 받은 유저들은 바이러스 공격의 위험에 노출되게 됩니다. 그렇기 때문에, S3에 올리기 전 바이러스가 있는 파일인지 스캔하는 작업은 매우 중요합니다.

이번 블로그에서는 S3와 같은 클라우드 스토리지에 대한 바이러스 검출을 제공하는 Cloud One File Storage Security에 대해서 이야기해보려고 합니다.

Cloud One File Storage Security란?

Cloud One File Storage Security란 AWS, Azure와 같은 클라우드 스토리지 상(이번 블로그에서는 Amazon S3를 중심으로 설명드립니다)의 파일에 대해 바이러스, 트로이 목마, 스파이웨어 등의 악성 소프트웨어를 검출해주는 서비스입니다. AWS 상에서 Cloud One File Storage Security는 AWS CloudFormation을 통해 제공되며, IAM, Lambda, SNS, SQS 등의 리소스를 자동으로 배포해줍니다.

Cloud One File Storage Security가 바이러스를 검출하는 흐름입니다. 유저가 S3에 파일을 업로드 하게 되면 Lambda 함수가 작동 하여 SQS에 해당 파일에 대한 미리 서명된 URL을 보내게 됩니다. 그 후, 스캔을 담당하는 Lambda 함수가 SQS에서 미리 서명된 URL을 읽어 해당 파일이 존재하는지 체크 후, 스캔을 실시합니다. 스캔은 파일의 크기나 형식에 따라 3초에서 25초정도 소요됩니다.

스캔이 끝나면 해당 결과를 SNS 토픽으로 보내게 되고, 해당 SNS 토픽을 구독하고 있는 Lambda 함수에서 위와 같이 S3 파일의 태그를 업데이트 하게 됩니다. 태그의 내용에 대해서는 아래의 링크를 참조해주세요.

태그 업데이트 이외에 스캔 결과에 따라 다른 작업을 하고 싶으면, Cloud One File Storage Security에서 제공하는 샘플 코드나 따로 작성한 커스텀 Lambda를 SNS에 구독시켜 다른 작업을 하는 것도 가능합니다.

그러면, 실제로 Cloud One File Storage Security를 AWS 상에 구축을 해보도록 하겠습니다.

Cloud One File Storage Security 구축

Cloud One 계정 생성

우선, Cloud One 계정을 생성합니다. 계정 생성은 이메일, 이름, 나라, 비밀번호로 굉장히 간단히 생성할 수 있습니다.

계정을 생성한 후, 그 안에서 사용할 어카운트를 생성합니다. 위의 버튼을 눌러 어카운트 별명, 사용할 리전을 선택합니다. 이 블로그를 쓰는 2022년 4월에는 아직 한국 리전을 제공 안하기 때문에 가장 가까운 일본 리전을 선택합니다. 이로서 Cloud One을 사용할 준비가 끝났습니다.

Cloud One File Storage Security 스택 생성

어카운트를 선택한 후, File Storage Security 서비스를 선택하게 되면 위와 같은 화면을 볼 수 있습니다. 스택을 배포하려면 Deploy 버튼을 누릅니다.

위와 같은 모달 화면이 나오는데 Scanner Stack and Storage Stack 을 선택합니다.

여기서 Launch Stack 버튼을 누르면 AWS CloudFormation 콘솔 화면으로 이동하게 됩니다. 여기서 파라미터를 입력하게 되는데 필수적으로 입력해야하는 것은 S3BucketToScan 뿐입니다. 이외의 파라미터에 대해서는 필요에 따라 입력을 하면 됩니다. 파라미터에 대한 설명은 이하의 링크를 참조해주세요. (파라미터에서 Prefix를 설정할 시, 해당 Prefix에 이벤트가 등록되어있는지 확인하여야합니다. 기존의 이벤트가 있다면 스택 생성에 실패하게 됩니다!)

파라미터 입력 후, 리소스 생성에 대한 승인 후, 스택 생성을 눌러 스택 생성을 진행합니다. 스택 생성이 완료될 때 까지는 10분 정도 소요가 됩니다.

CloudFormation 스택 생성이 완료 되면 스택 출력에서 ScannerStackManagementRoleARNStorageStackManagementRoleARN을 복사하여 위와 같이 해당 부분에 각각에 대해 입력을 하고 Submit 버튼을 누릅니다. 배포가 완료 되었다는 메세지가 나오면 기본적인 구축은 끝입니다.

악성 소프트웨어 스캔 테스트

아까 파라미터로 입력한 스캔할 S3 버킷으로 이동하여 파일을 하나 업로드 하여봅니다.

업로드 후, 해당 오브젝트의 태그를 보면 위와 같이 태그에 스캔 결과가 기록되있는 것을 볼 수 있습니다.

악성 소프트웨어가 있는 파일의 경우 위와 같이 태그가 기록됩니다. 이와 같이 굉장히 간단하게 퍼포먼스가 뛰어난 악성 소프트웨어 검출 프로그램을 구축할 수 있습니다.

추가기능

블로그의 초반부분에서도 잠시 말하였지만, Cloud One File Storage Security에서 제공하는 샘플 코드를 사용하여 스캔 결과에 따라 파일을 다른 버킷으로 승격 혹은 격리 시키는 것도 가능합니다.

혹은 스택 생성에 의해 작성된 위의 SNS 토픽에 따로 작성한 Lambda 함수 등을 구독 시켜 다른 작업을 하는 것도 가능합니다.

또한, Scanner 스택이나 Storage 스택을 따로 추가 구축을 할 수가 있습니다. Scanner 스택을 따로 구축하는 일은 별로 없겠지만, 스캔해야할 S3 버킷이 여러 군데로 분산되어있어 Storage 스택을 추가해야하는 경우는 꽤 생길 수도 있습니다. 해당 작업에 관해서는 이하의 링크를 참조해주세요. (스캔할 파일이 너무 많은 버킷에 분산되어 있을 경우에는 Scanner 스택이 연결된 버킷에 전송하여 스캔 후, 다시 해당 버킷에 백아웃 하는 것을 권고하고 있습니다.)

마지막으로 Cloud One File Storage Security를 도입하기 전부터 있었던 파일에 대해서 스캔을 하고 싶을 때 전체 S3 버킷에 대해서 스캔을 하는 것도 가능합니다. 또한, 이미 바이러스 스캔을 마친 후 S3 버킷에 들어있는 파일에 대해서 읽기 요청이 왔을 때, 다시 한 번 악성 소프트웨어가 있는지 스캔하는 작업을 하게 할 수도 있습니다. 이는 기존에 스캔을 완료한 파일이라도 새롭게 정의된 악성 소프트웨어를 가지고 있는지 다시 한 번 스캔을 하는 용도로 사용할 수 있습니다. 작업에 대해서는 이하의 링크를 참고해주세요.

마무리

Cloud One File Storage Security는 사용한 만큼의 요금을 지불을 하게 되는데, AWS Marketplace, Azure Marketplace에서 구독함으로서 AWS, Azure의 요금과 통합시킬 수 있습니다. 자세한 요금에 관한 내용은 이하의 링크를 참조해주세요

이번 블로그에서는 Cloud One File Storage Security에 대해서 간단한 설명과 구축을 해보았습니다. 구축 방법이 간단하기도 하고, 설명서가 사진과 함께 굉장히 잘 정리 되있어 구축을 하는데 어려움을 겪는 일이 없어 굉장히 좋았습니다. 혹시, 요금 없이 스캔 작업을 하고 싶다 하시는 분들은 이하의 OSS의 활용도 검토해보실 수 있을 것 같습니다. 퍼포먼스 적으로는 Cloud One File Storage Security 보다 떨어지지만 무료라는 점에서 사용해보아도 괜찮을 것 같습니다.

그럼, 블로그는 이상으로 마치도록 하겠습니다!