흰색 책상 위에 코드가 표시된 열린 노트북이 넓은 각도에서 촬영되었고, 근처에는 모니터와 커피잔이 놓여 있다.

Swimlane은 SecOps 팀을 지원하기 위해 그래픽 기반 도구를 오픈 소스로 공개했습니다.

3 1분 읽기

 

대화를 나누는 동안 지저귀다 Microsoft Graph API에 대해 저는 기존 Exchange eDiscovery 기능이 Microsoft Graph API에서 지원되지 않을 거라고 확신했었습니다. 하지만 제 생각이 완전히 틀렸더군요.

이전에 본 적 없는 몇 가지 엔드포인트를 발견한 후, graphish라는 파이썬 패키지를 작성하기로 결정했습니다. 그래프시 Swimlane은 IT 담당자, 보안 운영 담당자(SecOps), 개발자 등이 Microsoft Graph API를 사용하여 사서함에서 이메일 메시지를 검색하고 삭제할 수 있도록 하는 오픈 소스 Python 패키지입니다.

Office 365 고객이고 Microsoft Azure Active Directory를 보유하고 있다면 이 새로운 패키지를 사용하는 데 필요한 모든 조건을 충족한 것입니다. 하지만 이 새로운 패키지를 완벽하게 활용하기 전에 몇 가지 추가 단계를 거쳐야 합니다.

먼저, 이 패키지를 실행할 때 사용할 서비스/애플리케이션 유형을 결정해야 합니다. Microsoft Graph API는 조직에서 Microsoft Azure AD에 애플리케이션을 등록해야 사용할 수 있습니다. 이 과정은 다소 복잡할 수 있지만, 다행히 애플리케이션 유형과 Microsoft Graph API 사용법을 이해하는 데 도움이 되는 시리즈를 이미 작성했습니다.

  1. Microsoft의 OAuth2 엔드포인트 및 애플리케이션 유형
  2. Microsoft의 OAuth2 구현: 앱 등록
  3. Microsoft의 OAuth2 구현: Microsoft Graph API 사용

애플리케이션 유형에 따라 인증 권한 부여 워크플로가 달라집니다. 그래프시 레거시(위임된 권한) 및 데몬/서비스(애플리케이션 권한) 애플리케이션 등록 유형을 모두 지원합니다.

기본 사항은 다음과 같습니다. Microsoft Graph API에 액세스할 때 사용자 이름과 암호를 사용하려면 등록된 애플리케이션에 해당 엔드포인트에 대한 적절한 권한이 있는지 확인해야 합니다. 그래프시 즉, Mail.ReadWrite이고 유형은 "위임됨"입니다.

사용하고 싶으시다면 그래프시 데몬/서비스 애플리케이션으로 실행하려면 "애플리케이션" 유형으로 Mail.ReadWrite 권한이 있는지 확인해야 합니다.“

아래 스크린샷에는 두 가지 권한이 모두 표시되어 있는데, 이는 괜찮지만 둘 중 하나를 선택하는 것을 권장합니다.

Azure Active Directory에 애플리케이션이 생성되었으면 이제 PyPI 또는 저희 리포지토리에서 Graphish를 설치해 보겠습니다.

로컬에서 실행하려면 다음 명령어를 사용하세요: git clone [email protected]:swimlane/graphish.git cd graphish pip install setup.py OS X 및 Linux: pip install graphish Windows: pip install graphish

이제 그래프시 설치된 경우, 등록한 애플리케이션 유형에 따라 적절한 값을 제공해야 합니다. 이 예에서는 애플리케이션 인증(클라이언트 자격 증명 인증 흐름)을 사용하는 방법을 보여드리겠습니다.

참고: graphish 사용 방법에 대한 자세한 정보는 여기에서 확인할 수 있습니다.

사용하려면 그래프시 애플리케이션 권한을 사용하려면 GraphConnector 객체를 생성하기 위해 clientId, clientSecret 및 tenantId를 제공해야 합니다.

Graphish에서 GraphConnector #를 가져옵니다. 백엔드/클라이언트 자격 증명 인증 흐름의 경우 다음과 같이 커넥터를 제공하면 됩니다. connector = GraphConnector( clientId='', # 애플리케이션 클라이언트 ID, clientSecret='', # 애플리케이션 클라이언트 시크릿, tenantId='', # 애플리케이션 Azure 테넌트 ID )

애플리케이션 인증(클라이언트 자격 증명 부여 인증 흐름)을 사용하면 기본적으로 자신의 사서함을 검색하거나 `userPrincipalName`을 전달하여 검색할 수 있습니다. 그래프시 해당 사서함(이메일 주소)을 검색합니다.

수색 당신의 서비스/데몬 인증 흐름을 사용하는 계정:

`from graphish import Search` `search = Search(connector)` `new_search = search.create( searchFolderName='Phishing Search', sourceFolder='inbox', filterQuery="contains(subject, 'EXPIRES')" )`

다른 검색 중 사용자 사서함 서비스/데몬 인증 흐름 사용:

Graphish에서 Search를 가져옵니다. search = Search( connector, userPrincipalName='[email protected]' # 검색하려는 사용자의 사서함 ) 

새 검색 개체를 생성했으면 이제 개별 검색을 생성할 수 있습니다.

new_search = search.create( searchFolderName='Phishing Search2', sourceFolder='inbox', filterQuery="contains(subject, 'phish')" )

검색 폴더 이름(숨김), 소스 폴더 및 검색어를 포함하여 새 검색을 생성한 후, messages 메서드를 사용하여 검색 결과를 가져올 수 있습니다.

messages = search.messages() for message in messages: print(message)

다음은 메시지 객체에서 사용할 수 있는 속성 목록입니다.

  • 보낸 날짜 시간
  • 웹링크
  • 대화 ID
  • 인터넷메시지ID
  • ID
  • 읽음확인요청됨
  • 주제
  • 마지막 수정 날짜 시간
  • 본문미리보기
  • ~에서
  • 초안입니다
  • 커넥터
  • 중요성
  • changeKey
  • 수신 날짜 시간
  • 부모폴더ID
  • 배송수령 요청됨
  • 답장하기
  • 수신자에게
  • cc수신자
  • 깃발
  • 사용자
  • 카테고리
  • _헤더
    보내는 사람
  • 생성 날짜 시간
  • isRead
  • 첨부파일이 있습니다
  • bcc수신자
  • 추론 분류
  • @odata.etag

검색 결과에 나온 메시지를 삭제하려면 delete_search_messages 메서드를 사용합니다. 다른 메시지를 삭제하려면 delete 메서드를 사용하면 됩니다.

검색 폴더에서 메시지를 삭제하려면 검색 폴더 ID와 삭제하려는 메시지 ID를 모두 입력해야 합니다.

# 메시지 삭제 delete = Delete( connector, userPrincipalName='[email protected]', # 검색할 사용자의 사서함 ) for message in messages: delete.delete_search_message(search.folderId, message.id)

검색 업데이트 및 삭제와 같은 몇 가지 추가 기능이 있지만, 이에 대한 자세한 내용은 저희 웹사이트에서 확인하실 수 있습니다. 저장소.

즐거운 사냥 되세요!

라이브 데모를 요청하세요