
smbcrawler는 실용적인 도구로, 자격 증명과 호스트 목록을 받아 해당 공유를 '크롤링'(또는 '스파이더링')합니다.
SmbCrawler는 자격 증명과 호스트 목록을 받아 해당 공유를 '크롤링'(또는 '스파이더링')하는 실용적인 도구입니다. 기능:
Python 패키지 설치 방법에 대한 지침이 필요하다면, pipx가 설치되어 있는지 확인하고 pipx install smbcrawler를 실행하는 것을 권장합니다.
SmbCrawler는 MarkItDown을 사용하여 PDF, XLSX, DOCX, ZIP 등과 같은 일부 바이너리 파일을 자동으로 일반 텍스트로 변환할 수 있습니다. 이 패키지는 많은 종속성을 가져오므로 추가 기능으로 표시되어 있습니다. 그러나 최상의 결과를 얻으려면 적극 권장됩니다. 바이너리를 자동으로 변환하려면 다음과 같이 SmbCrawler를 설치하십시오:
pipx install 'smbcrawler[binary-conversion]'
셸 완성을 추가하는 것이 좋습니다. click 라이브러리를 사용하는 Python 앱으로서, 일반적인 메커니즘을 사용하여 bash, zsh 및 fish에 탭 완성을 추가할 수 있습니다.
다음과 같이 실행합니다 (10개 스레드, 최대 깊이 5):
$ smbcrawler crawl -i hosts.txt -u pen.tester -p iluvb0b -d contoso.local -t 10 -D 5
SmbCrawler가 대대적으로 개편되었습니다. 가장 중요한 변경 사항은 다음과 같습니다:
이전 CLI 인수('interesting files', 'boring shares' 등)는 투박하고 혼란스러웠습니다. 대신 이제 '프로필'을 사용합니다. 자세한 내용은 아래를 참조하세요.
또한, 기본적으로 관계형 데이터베이스를 재발명했지만 매우 형편없이 했기 때문에, sqlite를 직접 사용하는 것이 낫다는 것을 깨달았습니다. sqlite 접근 방식을 사용하면 좋은 성능으로 멋진 대화형 HTML 보고서를 생성할 수 있습니다. 다른 도구 파이프라인에서 데이터를 사용해야 하는 경우 여전히 다양한 형식으로 결과를 내보낼 수 있습니다.
이전 SmbCrawler의 권한 보고 방식은 때로 유용하지 않았습니다. 예를 들어, 공유의 루트 디렉토리에 대한 읽기 권한이 있지만 모든 하위 디렉토리가 보호되는 경우가 흔합니다(예: 사용자 프로필). 이제 SmbCrawler는 공유의 디렉토리 트리를 읽을 수 있는 깊이와, 최대 깊이 인수를 더 높게 제공했다면 더 깊이 들어갈 수 있었는지 또는 최대치에 도달했는지를 보고합니다.
이전 버전을 선호한다면, PyPI에서 여전히 사용 가능하며 예를 들어 pipx install smbcrawler==0.2.0으로 설치할 수 있습니다.
실행 중에는 다음 키를 사용할 수 있습니다:
p: 크롤러를 일시 중지하고 개별 호스트 또는 공유 건너뛰기<space>: 현재 진행 상황 출력s: 더 자세한 상태 업데이트 출력자세한 정보는 smbcrawler -h를 실행하십시오.
중간 규모의 네트워크에서도 SmbCrawler는 엄청난 양의 데이터를 찾을 것입니다. 과제는 가양성(false positive)을 줄이는 것입니다.
권한이 서비스 수준과 파일 시스템 수준 모두에 적용될 수 있다는 점을 인식하는 것이 중요합니다. 원격 SMB 서비스가 인증을 허용하고 사용자 계정이 원칙적으로 읽기 권한을 가질 수 있지만, 파일 시스템에서는 이러한 권한이 없을 수 있습니다.
SmbCrawler는 다음 권한이 있는지 보고합니다:
--depth 인수에 의해 제한됨)해당 작업을 시도하지 않고 SMB 공유의 권한을 확인하는 것은 간단하지 않기 때문에, SmbCrawler는 각 공유에 디렉토리를 생성하려고 시도합니다. 디렉토리 이름은 smbcrawler_DELETEME_<8 random characters>이며 즉시 삭제되지만, 그래도 주의하십시오.
[!WARNING] 때로는 디렉토리를 생성할 권한이 있지만 삭제할 권한이 없어 빈 디렉토리가 남을 수 있습니다.
특정 공유, 파일 또는 디렉토리를 처리하는 방법을 결정하기 위해 SmbCrawler에는 '프로필'이라는 기능이 있습니다. 기본 프로필을 살펴보세요.
프로필은 다음 위치에서 *.yml 또는 *.yaml 확장자를 가진 파일에서 로드됩니다:
$XDG_DATA_HOME/smbcrawler/ (~/.local/share/smbcrawler by default)--extra-profile-directory로 정의된 추가 디렉토리--extra-profile-file로 정의된 추가 파일각 위치의 프로필은 이전 정의를 재정의합니다.
regex 값은 프로필이 일치하는지 여부를 정의하며, 마지막으로 일치하는 프로필이 사용됩니다. 모든 정규식은 대소문자를 구분하지 않으며, Windows 세계에서 가장 일반적인 동작을 반영합니다.
서로 다른 소스의 프로필이 어떻게 함께 작동하는지 혼란스러울 수 있으므로 --dry-run 매개변수를 활용하십시오. 이를 통해 실제 구성을 보여주며 그 외에는 아무것도 하지 않습니다.
각 섹션은 항상 딕셔너리 목록입니다. 딕셔너리의 각 키는 임의의 레이블이며 각 값은 다시 다양한 속성을 가진 딕셔너리입니다.
comment: 이 프로필을 설명하는 도움이 되는 문자열regex: 이 프로필이 적용되는 파일을 정의하는 정규식. 일치하는 마지막 정규식이 유효합니다.regex_flags: 정규식 match 함수에 전달될 플래그 배열high_value (기본값: false): 파일이 '고가치'인 경우 해당 존재가 보고되지만 반드시 다운로드되지는 않습니다 (가상 하드 드라이브 생각 - 중요하지만 자동 다운로드하기에는 너무 큼)download (기본값: true): true이면 처음 200KiBi가 다운로드되고 (또는 high_value=true인 경우 전체 파일) 비밀을 위해 파싱됩니다.comment, regex, regex_flags: 위와 동일high_value: 해당 존재가 보고되고 크롤링 깊이가 무한대로 변경됨crawl_depth: --depth 인수로 정의된 것과 다른 깊이까지 이 공유 또는 디렉토리를 크롤링comment, regex_flags: 위와 동일regex: 비밀과 일치하는 정규식. 비밀 자체는 이름이 secret인 명명된 그룹일 수 있습니다.먼저 크롤링 깊이 1로 SmbCrawler를 실행하여 무엇을 다루고 있는지 파악하는 것이 좋습니다. 이 첫 번째 실행에서는 -w를 사용하여 쓰기 확인을 활성화할 수 있습니다:
$ smbcrawler -C permissions_check.crwl crawl -D1 -t10 -w \
-i <INPUT FILE> -u <USER> -d <DOMAIN> -p <PASSWORD>
이것은 각 공유의 루트 디렉토리에 대한 쓰기 및 읽기 권한만 확인합니다. 읽기 권한이 얼마나 깊이 있는지에 대한 자세한 정보는 전체 실행을 통해서만 알 수 있습니다.
초기 권한 확인 후, 다음 실행 또는 여러 번의 실행에서 흥미로운 공유와 지루한 공유를 식별할 수 있습니다. SYSVOL 및 NETLOGON과 같은 일부 공유는 여러 번 나타나므로, 다음 실행에서 크롤링 깊이를 0으로 설정하고 세 번째 실행에서 이러한 중복 공유를 스캔할 호스트 하나를 선택해야 합니다. 예는 다음과 같습니다:
$ smbcrawler -C dc_only.crwl crawl -D -1 <DC IP> \
-u <USER> -d <DOMAIN> -p <PASSWORD>
$ smbcrawler -C full.crwl crawl -D5 -t10 -i <NEW INPUT FILE> \
-u <USER> -d <DOMAIN> -p <PASSWORD> \
--extra-profile-file skip_sysvol.yml
여기서 skip_sysvol.yml은 다음과 같습니다:
shares:
sysvol:
comment: "Skip sysvol and netlogon share"
regex: 'SYSVOL|NETLOGON'
crawl_depth: 0
크롤링할 가치가 없다고 생각되는 다른 공유를 여기에 자유롭게 포함하십시오.
원시 데이터는 SQLite 데이터베이스와 디렉토리(기본적으로 output.crwl 및 output.crwl.d)에 포함됩니다. 디렉토리에는 두 개의 추가 디렉토리가 포함됩니다: 해시 내용으로 고유화된 다운로드 파일이 있는 디렉토리와 내용 파일을 가리키는 심볼릭 링크가 있는 모든 공유를 미러링하는 디렉토리입니다. 후자는 다운로드된 모든 파일을 grep하는 데 좋습니다.
데이터는 다양한 형식으로 변환될 수 있습니다. 예를 들어 sqlitebrowser로 데이터베이스에 간단히 접근할 수도 있습니다. 몇 가지 유용한 뷰가 미리 정의되어 있습니다. 또는 JSON을 출력하고 jq를 사용하여 데이터를 가공할 수도 있습니다.
예를 들어, 루트 디렉토리 너머까지 읽을 수 있었던 모든 공유를 LaTeX 테이블로 표시하려면 다음 쿼리를 사용하십시오:
SELECT target_id || " & " || name || " & " || remark || " \\"
FROM share
WHERE read_level > 0
ORDER BY target_id, name
또한 실험적인 HTML 출력 기능이 있습니다. 대량의 데이터에는 아직 완전히 유용하지 않을 수 있습니다.
보고된 비밀에서 많은 가양성 또는 가음성(false negative)을 발견하면 도움을 주시고 알려주십시오. 자동 감지를 개선하려고 할 때 커뮤니티의 의견이 중요합니다. 최상의 시나리오: 기본 프로필 파일을 변경하는 풀 리퀘스트를 제공하십시오.
Adrian Vollmer, SySS GmbH
MIT 라이선스; 자세한 내용은 LICENSE 참조.