좋습니다, 넷옵스. 모든 것을 자동화하고 마음껏 스크립팅하는 동안 보안에 대해 친절하게 상기시켜줄 시간입니다. 제가 말하는 것은 방화벽이나 WAF 또는 여러분이 배포하고 관리해야 할 다른 보안 서비스에 대한 것이 아닙니다. 저는 디지털 전환 여정을 시작하면서 여러분이 하게 될 스크립팅과 코드에 대해 이야기하고 있습니다.
오늘은 Security Rule Zero에 대해 알려드리고자 합니다. 기억을 되살리려면:
보안 규칙 0: 사용자 입력을 믿지 마세요. 항상.
꽤 간단한 규칙이죠?
그래야 하지만 그렇지 않습니다. 위반 그리고 그 후 위반 비즈니스 세계에서 보안 규칙 0이 위반된 것에서 그 원인을 찾을 수 있습니다. 개발자들이 새로운 언어와 프레임워크를 연구하고 배울 때 제공되는 예제 코드에서 이 규칙을 위반하는 사례가 만연하고, 안타깝게도 NetOps라는 흥미로운 새로운 영역에서도 이러한 위반 사례가 늘어나고 있습니다.
증거물 A를 제시해도 될까요?
공평하게 말해서, 적어도 이 스크립트에는 데이터가 검증되지 않았다는 경고가 포함되어 있습니다. 좋습니다. 이 스크립트는 입력을 기반으로 라우터 구성을 원격으로 조작하는 모든 작업을 수행합니다.
여기서 제가 문제라고 생각하는 점은 이 코드가 NetOps가 프로덕션 네트워크 장치를 자동화하기 위한 스크립팅을 시작하는 방법을 알려주도록 설계되었을 뿐, 이를 수행하는 방법에 대한 유용한 정보를 제공하지 않고 단지 데이터 검증에 대해서만 언급한다는 것입니다.
Python에서 IP 주소를 검증하는 방법에 대한 좋은 조언을 얻으려면 Stack Overflow 토론을 확인하세요 .
하지만 로리, 이건 스크립팅이고 우리는 CLI 작업을 하고 있어요. 얼마나 위험한 일이에요?
나쁜 습관은 고치기 어렵다.
보안 규칙 0을 무시하는 데는 두 가지 문제가 있습니다.
첫째, CLI의 시대는 끝났습니다, 친구여. API는 새로운 CLI이며, 대부분의 자동화 프레임워크는 RESTful API를 사용하여 네트워크 장치와 서비스를 프로비저닝하고 관리하는 방식을 채택하고 있습니다. 즉, 앱 스택과 파서를 의미합니다. API를 통해 구성을 변경할 수 있는 취약점이 있어 악용될 가능성이 있는 장치를 의미합니다.
저는 Apache Struts의 취약점에 대한 광범위한 논의와 관련하여 Cisco의 이 권고가 과장이 아니라는 것을 증거로 제시합니다. 합의는 Struts 프레임워크에 정제되지 않은 입력을 전달하여 온갖 나쁜 결과를 초래합니다.
하지만 악용 가능성이 보안 규칙 제로를 시행하는 것에 대해 걱정할 만큼 크지 않은 경우, 입력 내용을 정리하지 못하면 단일 장치보다 훨씬 더 큰 파장을 일으킬 수 있다는 점을 지적하고 싶습니다. 2017년 초 Amazon S3 중단에 대해 우리가 알고 있는 내용을 고려해 보세요.
태평양 표준시 기준 오전 9시 37분, 기존 플레이북을 사용하는 권한이 있는 S3 팀 구성원이 S3 청구 프로세스에 사용되는 S3 하위 시스템 중 하나에 대한 소수의 서버를 제거하려는 명령을 실행했습니다. 불행히도, 명령에 대한 입력 중 하나가 잘못 입력되어 의도한 것보다 더 많은 서버 세트가 제거되었습니다.
-- 북부 버지니아(US-EAST-1) 지역의 Amazon S3 서비스 중단 요약
그가 스크립트에 입력한 숫자는 그가 의도한 것보다 훨씬 컸습니다. 하지만 운영자가 제공하는 모든 것을 맹목적으로 받아들이는 스크립트(보안 규칙 0을 무시하고)는 결국 이런 종류의 실수로 이어질 수밖에 없습니다. 간단한 (하지만 인정하건대 귀찮은) 스크립트 검증만 했다면 이 문제가 일주일 이상 트위터에서 화제가 되는 것을 막을 수 있었을 것입니다.
네트워크에서, 생산에서 우리는 종종 권한 부여의 관점에서 보안을 바라봅니다. 밥에게 이 작업을 수행할 권한이 있습니까? 앨리스가 이 스크립트를 실행할 수 있나요? 그리고 그것이 필요하고, 그것은 여전히 중요합니다.
하지만 (내부) 디지털 혁신 여정의 속도를 높이고 더 많은 프레임워크를 도입하고 API와 스크립트를 사용하여 프로비저닝과 관리를 철저히 자동화함에 따라 개발 관점에서도 보안을 고려해야 합니다.
그리고 그 규칙 중 첫 번째는 보안 규칙 0입니다. 사용자 입력을 믿지 마세요. 항상.
항상 입력 내용을 검증하세요. 이는 추가적인 보안을 제공할 뿐만 아니라, 우수한 자동화가 나빠지는 것을 방지할 수도 있습니다.