Amazon Inspector, 취약점 개수가 아니라 닿는가
취약점 목록이 비었다고 안전이 확인된 것은 아니에요. Inspector의 검사 범위와 점수, 네트워크 도달 가능성을 구별해 읽어봐요.
이 글의 목차점수가 둘이다4
건물 점검표에 창문 잠금장치 불량이 스무 건 적혀 있다고 해 볼게요. 스무 건이 같은 무게일 리는 없어요. 3층 안뜰 쪽 창문과 1층 길가 창문은 같은 고장이어도 다른 문제예요. 점검표가 알려 주는 것은 고장이고, 위험은 그 고장이 어디에 있는가에서 나와요.
Amazon Inspector가 하는 일이 이 점검표를 자동으로 만드는 것이에요. 실행 중인 인스턴스와 컨테이너 이미지, 코드에서 알려진 취약점을 찾아 목록으로 내놓아요. 그리고 실무에서 어려운 부분은 목록을 만드는 쪽이 아니라 그 목록을 무슨 순서로 처리할지 정하는 쪽이에요.
점수가 둘이다
여기서 처음 만나는 혼란이 점수가 하나가 아니라는 사실이에요. 취약점에는 공표될 때 붙는 표준 심각도 점수가 있고, Inspector는 그와 별도로 자체 점수를 매기며 두 값이 다를 수 있다고 문서에 적어 두었어요.
두 점수가 다른 이유는 보는 대상이 다르기 때문이에요. 표준 점수는 그 취약점 자체가 얼마나 나쁜지를 세상 일반에 대해 말해요. 자체 점수는 그것이 지금 이 환경에서 어떤 조건에 놓여 있는지를 함께 봐요. 같은 취약점이라도 공개된 자리에 있으면 위험하고 안쪽에만 있으면 덜 위험해요.
앞 시리즈에서 의존성 경고를 이야기하며 적은 것과 같은 원리예요. 심각도 라벨만으로는 무엇부터 고쳐야 할지 정해지지 않아요. 실행 경로에 있는지, 바깥에서 닿는지, 고칠 버전이 있는지를 함께 봐야 순서가 나와요.
닿을 수 있는가
Inspector는 취약점뿐 아니라 EC2의 네트워크 도달 가능성도 분석해요. 현재 Inspector의 결과 유형 설명에 따르면 보안 그룹, ACL, 경로표 같은 네트워크 구성을 살펴 접근 경로를 찾아요. 이것은 실제로 프로그램에 접속해 취약점이 악용된 것을 확인했다는 뜻과는 달라요.
설정상 길이 열렸다는 결과를 받으면 다음으로 실제 프로그램이 그 포트에서 연결을 받는지, 어떤 인증을 요구하는지 살펴볼 수 있어요. 네트워크 경로와 프로그램의 동작을 구별하면 결과를 과장하지 않고 읽을 수 있어요. 길이 열려 있다는 것과 그 길로 중요한 데이터를 꺼낼 수 있다는 것은 다른 단계니까요.
그래서 외부 노출은 처리 순서를 정하는 중요한 재료예요. 여기에 악용 사례, 실행 조건, 그 자원이 가진 권한과 데이터의 중요성을 함께 봐요. 안쪽 서버라도 큰 권한을 가졌거나 다른 침해에서 이어 닿을 수 있다면 우선순위가 높을 수 있어요. 공개 여부 하나로 모든 취약점을 줄 세우지는 않아요.
스캔되지 않은 것은 깨끗해 보인다
가장 조심할 것은 목록이 비어 있는 경우예요. 취약점이 없다는 뜻일 수도 있고, 그 자원이 애초에 검사 대상에 들어 있지 않다는 뜻일 수도 있어요. 앞 글에서 알람을 이야기하며 적은 구분이 여기서 그대로 반복돼요. 세어 봤더니 없는 것과 세지 못한 것은 화면에서 똑같이 비어 보여요.
검사 범위도 따로 확인해야 해요. 지원 운영체제와 언어가 정해져 있고, EC2 검사는 에이전트 기반과 에이전트 없는 방식을 사용할 수 있어요. 에이전트가 없으면 무조건 검사되지 않는다는 뜻은 아니에요. 어떤 방식으로 마지막 검사가 끝났는지, 지원하지 않는 대상이 남았는지를 함께 봐야 빈 결과를 해석할 수 있어요.
| 결과 | 뜻일 수 있는 것 | 확인할 것 |
|---|---|---|
| 심각도 높은 항목이 많다 | 실제로 급한 것이 있다 | 그중 바깥에서 닿는 것이 몇 개인가 |
| 목록이 거의 비어 있다 | 깨끗하거나 검사되지 않았거나 | 검사 대상에 그 자원이 들어 있나 |
| 같은 항목이 계속 남는다 | 고칠 버전이 아직 없거나 방치되거나 | 예외로 둔 근거와 재검토 시점이 있나 |
세 번째 줄이 시간이 지나며 쌓이는 종류예요. 지금 못 고치는 것을 예외로 두는 일 자체는 정상인데, 여기에 문서가 분명히 못 박아 둔 문장이 하나 있어요. 예외 처리는 결과에 아무 영향을 주지 않으며 화면에서 가릴 뿐이라는 것이에요. 취약점은 그대로 있고 내 눈에서만 사라지므로, 근거와 다시 볼 날짜가 없으면 그 예외가 영원해져요.
저는 무엇을 먼저 봤나
이 도구를 붙이고 처음 받은 목록은 길었어요. 전부 고치려 들면 며칠이 걸리고, 그 며칠 동안 실제 위험은 그대로 남아요.
그래서 목록을 위에서부터 처리하는 대신 두 가지로 걸렀어요. 바깥에서 닿는 자리에 있는가, 그리고 그 코드가 실제로 실행되는 경로에 있는가. 두 조건을 모두 만족하는 것은 생각보다 적었고, 그것부터 처리하고 나니 나머지는 계획을 세워 나눠 볼 수 있는 크기가 됐어요.
이 도구가 주는 것은 우선순위가 아니라 재료였어요. 순서를 정하는 일은 제 환경을 아는 사람만 할 수 있고, 그 앞에서 개수는 별 의미가 없었어요.