문제를 평가하는 방법
Lockpick이 심각도를 정하는 방법, 확인된 문제가 보여 줘야 하는 것, 각 문제에 대한 확신의 정도, 먼저 고칠 것, 다시 검사로 증명할 수 있는 것을 설명합니다.
Lockpick 보고서의 모든 문제에는 심각도, 판정, 확신도가 함께 표시됩니다. 이 세 가지는 서로 다른 질문에 답합니다. 심각도는 얼마나 나쁠 수 있는지를 말합니다. 판정은 우리가 그 전체를 확인했는지를 말합니다. 확신도는 근거가 얼마나 강한지를 말합니다. Pulse와 Deep은 같은 규칙을 적용합니다.
심각도
심각도는 하나의 기준을 사용하며, 앱, 문서, API에서 모두 같습니다. 가장 심각한 것부터 덜 심각한 순서는 치명적, 높음, 보통, 낮음, 정보입니다. Pulse와 Deep은 오늘 현재 문제를 높음까지 평가합니다. 치명적은 Monitor 권고에 사용되며, 발표된 심각도가 없는 Monitor 권고는 등급 없음으로 표시됩니다.
문제는 스캔에서 다음 중 하나가 보일 때만 높음으로 평가됩니다.
- 누구나 읽을 수 있는 데이터. 로그인, 쿠키, 자격 증명 없이 보낸 요청에 데이터가 응답되었습니다.
- 한 고객이 다른 고객에 접근함. 한 계정이나 테넌트에서 다른 계정이나 테넌트로 넘어가는 데이터나 작업입니다.
- 노출된 자격 증명이나 세션. 비밀 키, 자격 증명이 들어 있는 설정 파일, 또는 로그인한 적 없는 사람에게 넘어간 세션입니다.
도메인의 주소를 탈취할 수 있는 경우도 해당합니다. 그 주소를 아무나 가져갈 수 있다는 것을 우리가 볼 수 있을 때입니다. 그 주소를 가져간 사람은 실제 도메인에서 페이지를 제공하고, 도메인 전체에 설정된 쿠키를 받게 됩니다.
다음은 그것만으로는 높음으로 평가되지 않습니다.
- 보안 헤더 누락, 쿠키 플래그, Content Security Policy의 빈틈
- TLS 설정과 인증서 경고
- 소프트웨어 버전과 기술 정보 노출. 권고와 일치하는 라이브러리 버전도 포함
- 디렉터리 목록, 스택 트레이스, 오류 페이지
- 열린 리디렉션
- DMARC나 SPF 같은 이메일 인증 설정
이런 문제도 보고는 하며, 보통 이하로 표시합니다. 실제 빈틈이고 해결하기 쉽기 때문입니다. 다른 관찰된 근거가 더 큰 이야기를 완성하면, 보고서는 단일 문제를 올리는 대신 그 이야기를 공격 체인으로 설명합니다.
확인된 문제가 보여 줘야 하는 것
문제 종류마다 네 부분으로 된 증명이 있습니다.
| 부분 | 답하는 질문 |
|---|---|
| 출발점 | 공격이 어디에서 시작되고, 누가 시작할 수 있는가 |
| 가장 가까운 통제 | 공격을 막았어야 하는 보호 장치 |
| 도달점 | 공격자가 실제로 닿는 곳 |
| 영향 | 그곳에 도달했을 때 따라오는 결과 |
공개된 Supabase 테이블의 경우, 출발점은 설계상 클라이언트 번들에 들어 있는 anon 키이고, 가장 가까운 통제는 행 수준 보안(row-level security)이며, 도달점은 행을 돌려준 인증되지 않은 읽기이고, 영향은 반환된 열이 담고 있는 내용입니다.
문제는 스캔이 모든 부분을 관찰했을 때만 확인됨입니다. 어떤 부분이 관찰되지 않고 추론된 것이라면, 문제는 검토 필요로 표시되며 아직 열려 있는 부분을 알려 줍니다. 증명 규칙이 정의되지 않은 문제 종류는 절대 확인되지 않습니다. 문제는 주장이 적용되지 않는다는 긍정적인 근거를 우리가 가지고 있을 때만 조치 불필요가 됩니다. 근거가 없다는 사실만으로는 충분하지 않으며, Pulse와 Deep은 현재 그런 근거를 기록하지 않으므로 그들의 문제는 확인되거나 검토 필요 중 하나입니다.
보이는 증명은 Lockpick이 그 문제 종류에 맞게 작성한 것입니다. 비밀 값, 응답 본문, 스캔이 실행된 방법은 절대 인용하지 않습니다.
얼마나 확신하나요?
- 높음. 사이트의 응답이 노출 자체를 보여 줬습니다.
- 보통. 공개 기록이나 콘텐츠의 패턴이 그것을 가리킵니다.
- 낮음. 헤더, 버전, 또는 API가 스스로 설명하는 내용에서 추론했습니다.
같은 것을 보여 주는 두 번째 읽기는 확신도를 한 단계 올립니다. 그것을 보여 주지 않는 두 번째 읽기는 한 단계 낮추고, 문제를 검토 상태로 남겨 둡니다.
긴급도를 매기는 방법
모든 발견 항목은 언제 고쳐야 하는지도 네 단계로 알려 줍니다. 심각도는 얼마나 나쁠 수 있는지를 말합니다. 긴급도는 하던 일을 멈춰야 하는지를 말합니다.
- 지금 수정. 오늘 멈추고 수정하세요. 고객 데이터, 계정 또는 키에 접근할 수 있습니다. 유출된 키, 열린 데이터베이스나 API, 비밀번호 해시, 관찰된 공격 체인이 해당합니다.
- 이번 주에 수정. 누군가 이를 악용할 수 있습니다. 그 밖의 높음 항목, 그리고 직접 또는 피해자를 통해 악용할 수 있는 중간 항목입니다. 위조할 수 있는 이메일이 예입니다.
- 시간 날 때. 공격을 쉽게 만들지만, 그 자체로 공격은 아닙니다. 빠진 보안 헤더, 쿠키 속성 같은 보안 강화 공백과 낮음 항목입니다.
- 할 일 없음. 알아두면 좋은 정보입니다. 수정할 것은 없습니다.
스킬, 플러그인, 마켓플레이스, MCP 서버는 내가 고칠 코드가 아닙니다. 설치할지를 정하는 것이므로, 같은 네 단계를 설치에 관한 말로 보여 줍니다.
- 아직 설치하지 마세요. 이것 때문에 설치가 안전하지 않습니다. 확인된 치명적 발견 항목이거나 훅 안에 있는 항목입니다. 수정을 기다리거나 다른 것을 고르세요.
- 설치 전에 확인. 설치하기 전에 이 부분을 읽거나 작성자에게 물어보세요.
- 알아둘 가치 있음. 미룰 이유는 아닙니다. 무엇을 하는지 알아두면 도움이 됩니다.
- 할 일 없음. 확인할 것은 없습니다.
발견 항목은 맨 위의 판정보다 더 긴급하게 표시되지 않습니다. 판정이 ‘위험한 점을 찾지 못했습니다’이면 모든 항목은 최대 ‘알아둘 가치 있음’입니다. ‘주의해서 설치’이면 최대 ‘설치 전에 확인’입니다. 저장소를 ‘설치하지 마세요’로 만드는 항목만 ‘아직 설치하지 마세요’로 표시됩니다. 앱 저장소는 위의 말, ‘지금 수정’부터 ‘할 일 없음’까지를 그대로 씁니다.
옆에는 확실한 정도를 한 단어로 보여 줍니다. 확인됨은 전부 확인했거나 두 번째 읽기에서도 다시 확인했다는 뜻입니다. 가능성 높음은 한 번 확인했거나 일부가 아직 확인되지 않았다는 뜻입니다. 가능성 있음은 문제를 가리키지만 확인하지 못했다는 뜻입니다.
발견 항목 그룹은 가장 긴급한 항목만큼 긴급합니다. 보고서 맨 위의 배지는 가장 긴급한 카드를 따르므로, 카드에 지금 수정이 있을 때만 지금 수정이라고 표시됩니다. 빠른 검사, Skill Check, 이메일, CLI, MCP 도구도 같은 말을 씁니다. 긴급도는 점수나 목록 순서를 바꾸지 않습니다.
먼저 고칠 것
보고서는 심각도 라벨이 아니라, 누군가 얼마나 직접 악용할 수 있는지에 따라 고칠 것을 나열합니다.
- 그 자체로 누구나 쓸 수 있는 문제. 확인된 것을 먼저 둡니다
- 피해자나 두 번째 단계가 필요한 문제. 예를 들어 위조될 수 있는 이메일입니다
- 공격자의 일을 쉽게 만드는 강화가 덜 된 부분
각 그룹 안에서는 확인된 문제가 검토가 필요한 문제보다 먼저 옵니다. 근거가 강한 것이 약한 것보다 먼저이고, 그다음에 더 높은 심각도가 옵니다.
다시 검사로 증명할 수 있는 것
다시 검사는 새 스캔을 이전 스캔과 비교하고, 이 레코드 다시 읽기는 공개 DNS 레코드를 새로 읽어 이전 문제와 비교합니다. 이전 문제는 각각 다음 세 가지 상태 중 하나로 끝납니다.
- 수정됨. 문제의 바탕이 되는 리소스나 레코드를 다시 읽었고, 문제가 더 이상 없었습니다.
- 여전히 열려 있음. 같은 문제가 다시 발견되었습니다.
- 판단 불가. 새로 읽은 결과로는 문제의 근거를 읽을 수 없었거나, 두 스캔을 비교할 수 없었습니다.
티켓을 닫았거나 작업 항목에 체크했다고 해서 문제가 수정됨으로 표시되지는 않습니다. 사이트에서 노출된 키를 지운다고 키가 폐기되는 것은 아니므로, 제공자와 함께 키를 교체하세요.
도움이 되었나요?