
대중을 위한 분산 알림!
Securitybot은 Ryan Huber의 블로그 포스트에서 설명한 분산 알림 채팅 봇의 오픈소스 구현체입니다. 분산 알림은 보안 팀의 모니터링 효율성을 향상시키고 보안 사고를 더 빠르고 효율적으로 포착하는 데 도움을 줍니다. 이 코드에서 Dropbox 특화 요소를 최대한 제거하여 여러분이 자신의 인스턴스를 설정하는 데 어려움이 없도록 했습니다. virtualenv/Docker 컨테이너에 나열된 요구 사항을 설치하고 봇이 알아서 동작하도록 하는 것은 비교적 쉬울 것입니다. 또한 데이터베이스를 탐색하고, API 호출을 수신하며, 봇이 원하는 사람에게 연락할 수 있도록 맞춤형 알림을 생성할 수 있는 간단한 프론트엔드를 제공합니다.
이 가이드는 가능한 한 빠르게 Securitybot 인스턴스를 별다른 부가 기능 없이 설정하는 과정을 안내합니다.
Slack, SQL, Duo에 연결할 것입니다.
완료되면 main.py와 비슷한 파일이 생성됩니다.
어딘가의 MySQL 서버에 securitybot이라는 데이터베이스가 필요합니다.
securitybot/sql.py에 위치한 init_sql이라는 함수를 제공했으며, 이 함수가 SQL을 초기화합니다.
현재는 호스트 localhost, 사용자 root, 비밀번호 없음으로 설정되어 있습니다.
데이터베이스가 그렇게 설정되어 있지 않을 테니 반드시 변경해야 합니다.
Slack과 통합하려면 토큰이 필요합니다.
가장 좋은 방법은 봇 사용자를 생성하고 그 토큰을 Securitybot에 사용하는 것입니다.
또한 사용자가 작업을 수행하지 않았다고 명시할 때 봇이 보고할 채널을 설정해야 합니다.
해당 채널의 고유 ID (C123456과 유사)를 찾고, 봇 사용자를 그 채널에 초대해야 합니다. 그렇지 않으면 메시지를 보낼 수 없습니다.
Duo의 경우 Auth API 인스턴스를 생성하고, 적절한 이름을 지정한 후 통합 키, 비밀 키, Auth API 엔드포인트 URI를 기록해 두세요.
루트 디렉토리에 제공된 main.py를 참고하여 이 모든 것을 사용하는 방법을 확인하세요.
모든 전역 변수를 위에서 찾은 값으로 바꾸세요.
위의 모든 과정이 성공적으로 생성되었다면 Securitybot이 실행됩니다.
테스트하려면 할당된 봇 사용자에게 hi라고 메시지를 보내세요.
알림 처리 과정을 테스트하려면 test라고 메시지를 보내 봇을 테스트하세요.
Securitybot은 최대한 모듈화되도록 설계되었습니다. 즉, 채팅 시스템, 2FA 제공자, 알림 데이터 소스를 쉽게 교체할 수 있습니다. 봇과 밀접하게 통합된 유일한 시스템은 SQL이지만, 다른 데이터베이스에 대한 지원을 추가하는 것도 어렵지 않습니다. 데이터베이스를 사용하면 알림이 영구적으로 유지되며 일시적인 장애가 발생해도 봇이 상태를 (너무 많이) 잃지 않습니다.
봇 자체는 다음과 같은 소수의 기능을 수행합니다:
메시징, 2FA, 알림 관리는 설정 가능한 모듈을 통해 제공되며, 초기화 시 봇에 추가됩니다.
봇은 들어오는 메시지를 명령어로 처리합니다.
명령어 파싱 및 처리는 Securitybot 클래스에서 수행되며, 명령어 자체는 두 곳에서 제공됩니다.
명령어의 함수는 commands.py에 정의되어 있고, 그 구조는 config/ 디렉토리 아래 commands.yaml에 정의되어 있습니다.
Securitybot은 다양한 메시징 시스템과 호환되도록 설계되었습니다.
현재 Slack에 대한 바인딩을 제공하지만, Gitter나 Zulip과 같은 다른 플러그인을 자유롭게 기여해 주세요.
메시징은 securitybot/chat/chat.py에 의해 가능하며, 이 파일은 메시징 그룹의 사용자 조회, 사용자에게 메시지 전송, 특정 채널/룸으로 메시지 전송을 위한 소수의 함수를 제공합니다.
새로운 메시징 시스템에 대한 바인딩을 추가하려면 Chat을 서브클래싱하세요.
2FA 지원은 auth/auth.py에 의해 제공되며, 비동기 2FA를 2FA 가능 여부 확인, 2FA 세션 시작, 2FA 세션 상태 폴링을 가능하게 하는 몇 가지 함수로 래핑합니다.
Duo Auth API를 통해 Duo Push를 지원하지만, 다른 제품이나 사내 2FA 솔루션에 대한 지원을 추가하는 것은 Auth의 서브클래스를 생성하는 것만큼 쉽습니다.
작업 관리는 tasker/tasker.py와 Tasker 클래스에 의해 제공됩니다.
알림이 SQL 데이터베이스에 기록되므로 제공되는 Tasker는 SQLTasker입니다.
이 클래스는 개별 Task 객체를 통해 새 작업을 가져오고 업데이트하는 기능을 제공합니다.
블랙리스트는 SQL 데이터베이스에 의해 처리되며, blacklist/blacklist.py와 서브클래스 blacklist/sql_blacklist.py에 제공됩니다.
User 객체는 사용자 상태 처리를 지원합니다.
메시징 시스템이 제공하는 모든 정보를 추적하지만, 실제로는 사용자에게 연락하기 위해 사용자의 고유 ID와 사용자 이름만 사용합니다.
알림은 해당 알림을 생성한 이벤트의 해시에서 생성된 SHA-256 해시로 고유하게 식별됩니다. SHA-256 해시가 충돌이 없을 만큼 충분히 무작위적이라고 가정합니다. SHA-256 충돌을 발견하면 가까운 대학교에 연락하여 그로 인한 명성과 재물을 누리시기 바랍니다.
질문을 보내 주세요
기여자는 Dropbox 기여자 라이선스 계약을 준수해야 합니다.
Copyright 2016 Dropbox, Inc.
Apache License, Version 2.0 (이하 "라이선스")에 따라 라이선스가 부여됩니다. 라이선스를 준수하지 않는 경우 이 파일을 사용할 수 없습니다. 라이선스 사본은 다음에서 확인할 수 있습니다.
http://www.apache.org/licenses/LICENSE-2.0
관련 법률에 의해 요구되거나 서면으로 동의하지 않는 한, 라이선스에 따라 배포되는 소프트웨어는 "있는 그대로" 기반으로 제공되며, 명시적이든 묵시적이든 어떠한 종류의 보증이나 조건도 없습니다. 라이선스에 따른 권리 및 제한 사항을 관리하는 특정 언어는 라이선스를 참조하십시오.