오늘날 사이버 보안 위협은 어디에나 존재하며 끊임없이 발생합니다. 우리 삶의 더 많은 측면이 디지털화될수록 사이버 범죄자들에게 걸린 위험은 더욱 커집니다: 보호해야 할 코드가 너무 많고 개인 데이터의 가치가 너무 크기 때문입니다. 프로그램 배포 후 공격 표면의 모든 측면을 추적하고 방어하려는 시도는 거의 불가능해졌습니다.
일부 접근 방식은 이러한 증상 중 일부를 완화할 수 있으며, 그중 하나는 선견지명을 가진 조직이 인프라스트럭처로서의 코드(IaC) 개념을 채택할 때 명백해집니다. 물론 모든 개발과 마찬가지로 극복해야 할 보안 함정이 존재합니다. 개발자들이 애플리케이션을 호스팅하는 데 필수적인 인프라를 생성하는 코드를 다루기 때문에, 프로세스 전반에 걸쳐 보안에 대한 인식이 필수적입니다.
그렇다면 클라우드 서버 환경에서 초보 개발자는 어떻게 자신의 역량을 향상시키고, 노하우를 익히며, 보안에 대한 인식이 높아진 상태로 버전을 다룰 수 있을까요? 우리는 IaC의 일반적인 취약점을 해결하기 위해 'Coders Conquer Security' 시리즈를 기획했으며, 향후 블로그에서는 개발자로서 여러분이 소속 조직 내에서 코드 형태의 안전한 인프라를 구축하기 시작할 수 있는 방법에 집중할 예정입니다.
가자.
미국 서부 개척 시대에 유래한 우화가 하나 있다. 한 남자가 강도들이 자신의 재산을 습격하고 털어갈까 봐 지나치게 불안해했다는 이야기다. 이를 만회하기 위해 그는 매우 튼튼한 현관문 설치, 모든 창문 잠금, 그리고 손에 닿는 곳에 수많은 무기를 비치하는 등 온갖 보안 조치를 취했습니다. 그런데도 어느 날 밤 그가 잠든 사이 옆문을 잠그는 것을 잊은 탓에 결국 강도를 당하고 말았습니다. 강도들은 보안이 허술해진 틈을 재빨리 노린 것이었습니다.
인프라의 보안 기능을 비활성화하는 것은 이와 비슷합니다. 네트워크에 견고한 보안 인프라가 구축되어 있더라도 일부 요소가 비활성화되었다면 아무 소용이 없습니다.
본론에 들어가기 전에 여러분께 한 가지 도전장을 내밀어도 될까요?
위 링크를 클릭하시면 게임화된 교육 플랫폼으로 이동하게 되며, 지금 바로 비활성화된 보안 취약점을 중화시키는 시도를 해보실 수 있습니다. (주의: Kubernetes에서 열리지만, 드롭다운 메뉴를 사용하시면 Docker, CloudFormation, Terraform, Ansible 중에서 선택하실 수 있습니다).
어떻게 해결했어? 아직 할 일이 남아 있다면, 다음 내용을 읽어보세요:
보안 기능은 다양한 이유로 비활성화될 수 있습니다. 일부 애플리케이션 및 프레임워크에서는 기본적으로 비활성화되어 있으며, 작동시키려면 먼저 활성화해야 합니다. 또한 관리자가 특정 작업을 수행할 때 지속적으로 경고나 차단 없이 더 쉽게 처리할 수 있도록 특정 보안 기능을 비활성화했을 수도 있습니다(예: AWS S3 저장소를 공개로 설정). 작업이 완료된 후, 그들은 비활성화된 기능을 다시 활성화하는 것을 잊을 수 있습니다. 또한 향후 작업을 용이하게 하기 위해 해당 기능을 계속 비활성화 상태로 유지하는 것을 선호할 수도 있습니다.
비활성화된 보안 기능이 왜 그렇게 위험한가
하나 이상의 보안 기능을 비활성화하는 것은 여러 가지 이유로 바람직하지 않습니다. 첫째, 해당 보안 기능은 알려진 악용, 위협 또는 취약점으로부터 보호하기 위해 인프라 리소스에 통합되었습니다. 비활성화되면 리소스를 보호할 수 없게 됩니다.
공격자들은 항상 먼저 쉽게 악용할 수 있는 취약점을 찾으려 할 것이며, 심지어 일반적인 취약점을 수정하는 스크립트를 사용할 수도 있습니다. 이는 마치 도둑이 길가에 주차된 모든 차량의 문을 잠금 해제 상태인지 확인하는 것과 비슷합니다. 창문을 깨는 것보다 훨씬 쉬운 일이니까요. 해커들은 일반적인 보안 방어 체계가 작동하지 않는다는 사실을 발견하고 놀랄 수도 있습니다. 하지만 그런 상황이 발생하면 이를 악용하는 데 오래 걸리지 않을 것입니다.
둘째, 적절한 보안 조치를 구축한 후 이를 비활성화하는 것은 허위의 안전감을 조성합니다. 관리자들은 누군가가 이러한 방어 체계를 해제했다는 사실을 모른다면, 자신들이 일반적인 위협으로부터 보호받고 있다고 생각할 수 있습니다.
공격자가 비활성화된 보안 기능을 악용할 수 있는 방식의 예로, AWS S3의 공개 액세스 차단 보안 기능을 살펴보겠습니다. Amazon S3의 공개 액세스가 차단되면 계정 관리자 및 저장소 소유자는 Amazon S3 리소스에 대한 공개 액세스를 제한하기 위한 중앙 집중식 제어를 쉽게 구성할 수 있습니다. 그러나 일부 관리자는 S3 저장소 접근 시 문제가 발생하면 작업을 최대한 빨리 완료하기 위해 저장소를 공개적으로 설정하기로 결정합니다. 이 보안 기능을 활성화하는 것을 잊어버리면 공격자는 해당 S3 저장소에 저장된 정보에 대한 완전한 접근 권한을 얻게 되어 정보 유출뿐만 아니라 데이터 전송 비용으로 인한 추가 비용도 발생하게 됩니다.
실제 코드 비교; 다음 CloudFormation 발췌문을 살펴보세요:
취약한 :
기업 계정 :
유형 : AWS : :S3 : :Bucket
속성 :
공개 액세스 블록 구성 :
BlockPublicACLS : false
BlockPublicPolicy : false
IgnorepublicACLS : false
RestrictPublicBuckets : false
버전 관리 설정 :
상태 : 활성화됨
버킷 암호화 :
서버 측 암호화 설정 :
- 기본 서버 측 암호화 :
SSE 알고리즘 : "AES256"
안전한 :
기업 계정 :
유형 : AWS : :S3 : :Bucket
속성 :
공개 액세스 블록 구성 :
BlockPublicACLS : true
BlockPublicPolicy : true
Ignorepublicacls : true
RestrictPublicBuckets : true
버전 관리 설정 :
상태 : 활성화됨
버킷 암호화 :
서버 측 암호화 설정 :
- 기본 서버 측 암호화 :
SSE 알고리즘 : "AES256"
비활성화된 보안 기능 방지
비활성화된 보안 기능이 조직에 피해를 주는 것을 방지하는 것은 정책과 실행 모두에 관한 문제입니다. 보안 기능은 매우 특정된 상황에서만 비활성화되어야 한다는 강력한 정책이 마련되어야 합니다. 문제 해결이나 애플리케이션 업데이트를 위해 기능을 일시적으로 비활성화해야 하는 사건은 반드시 기록되어야 합니다. 필요한 작업이 완료된 후에는 기능이 완전히 재활성화되었는지 확인해야 합니다.
보안 기능을 운영 효율화를 위해 영구적으로 비활성화해야 하는 경우, 기본 보호 기능이 없는 상태에서 해커가 해당 데이터에 접근하는 것을 방지하기 위해 다른 보호 장치를 마련해야 합니다. 필수 보호 기능이 비활성화된 상태라면, 공격자가 이 잠금 해제된 문을 발견하고 이를 악용하는 것은 시간 문제일 뿐입니다.
더 알아보고, 도전해보세요:
보안 코드 워리어를 참조하십시오 Secure Code Warrior 블로그 페이지를 참조하여 이 취약점에 대해 자세히 알아보고, 다른 보안 결함과 취약점으로 인한 피해를 방지하여 조직과 고객을 보호하는 방법을 확인하세요.
이 글을 읽은 지금, 해당 취약점을 찾아 수정할 준비가 되셨나요? Secure Code Warrior 플랫폼에서IaC 기반 게임화 보안 챌린지를 시도해 보세요. 사이버 보안 역량을 Secure Code Warrior 최신 상태로 업데이트할 Secure Code Warrior .
이 주간 시리즈는 코드로서의 인프라와 관련된 8가지 주요 취약점을 다룹니다. 다음 주에 더 많은 내용을 확인하세요!