
실시간 트래픽 검사, 침입 탐지 및 차단, 프로토콜 분석, 규칙 기반 위협 헌팅을 위한 오픈소스 네트워크 IDS/IPS/NSM 엔진입니다.
Suricata는 OISF와 Suricata 커뮤니티가 개발한 네트워크 IDS, IPS 및 NSM 엔진입니다.
저희는 패치 및 기타 기여를 기꺼이 받고 있습니다. 시작하는 방법은 기여 프로세스를 참조하세요.
Suricata는 대부분 신뢰할 수 없는 입력을 처리하는 복잡한 소프트웨어입니다. 이 입력을 잘못 처리하면 심각한 결과가 발생할 수 있습니다:
다시 말해, 많은 일반적인 경우에 IDS/IPS가 공격자에게 직접 도달 가능하기 때문에 위험이 상당히 높다고 생각합니다.
이러한 이유로 우리는 상당히 광범위한 QA 프로세스를 개발했습니다. 그 결과 Suricata에 기여하는 과정이 다소 길어질 수 있습니다.
대략적인 단계는 다음과 같습니다:
OISF 팀 구성원은 비공개 QA 환경에 빌드를 제출할 수 있습니다. QA 환경은 일련의 빌드 테스트와 회귀 테스트 스위트를 실행하여 기존 기능이 손상되지 않는지 확인합니다.
최종 QA 실행은 최소 몇 시간이 걸리며 일반적으로 밤새 실행됩니다. 현재 다음 항목들을 실행합니다:
이러한 테스트 외에도 코드 변경 유형에 따라 추가 테스트를 수동으로 실행할 수 있습니다:
위 테스트의 거의 모두가 승인 테스트로 사용된다는 점을 인식하는 것이 중요합니다. 무언가 실패하면 코드에서 이를 해결하는 것은 당신의 몫입니다.
QA의 한 단계는 현재 병합 후에 실행됩니다. 우리는 Coverity Scan 프로그램에 빌드를 제출합니다. 이 (무료) 서비스의 제한으로 인해 하루에 최대 한 번만 제출할 수 있습니다. 물론 병합 후 커뮤니티에서 문제를 발견할 수도 있습니다. 두 경우 모두 발생할 수 있는 문제를 해결하는 데 도움을 요청합니다.
Q: 제 PR을 수락하시겠습니까?
A: 코드 품질을 포함한 여러 요인에 따라 달라집니다. 새로운 기능의 경우 팀 및/또는 커뮤니티가 그 기능이 유용하다고 생각하는지, 다른 코드와 기능에 얼마나 영향을 미치는지, 성능 회귀의 위험 등도 고려합니다.
Q: 제 PR은 언제 병합되나요?
A: 상황에 따라 다릅니다. 주요 기능이거나 고위험 변경으로 간주되는 경우 다음 주요 버전에 포함될 가능성이 높습니다.
Q: 제 PR이 왜 닫혔나요?
A: Suricata GitHub 워크플로우에 문서화된 대로, 모든 변경 사항에 대해 새 풀 리퀘스트를 기대합니다.
일반적으로 팀(또는 커뮤니티)이 풀 리퀘스트에 피드백을 제공한 후 개선된 PR로 대체될 것으로 예상됩니다. 따라서 댓글을 확인하세요. 댓글에 동의하지 않는다면 닫힌 PR에서 여전히 논의할 수 있습니다.
댓글 없이 PR이 닫혔다면 QA 실패 때문일 가능성이 높습니다. GitHub-CI 검사가 실패했다면 PR을 즉시 수정해야 합니다. QA 실패가 잘못되었다고 생각하지 않는 한 논의할 필요가 없습니다.
Q: 컴파일러/코드 분석기/도구가 잘못된 것 같습니다. 어떻게 해야 하나요?
A: QA 자동화를 돕기 위해 경고나 오류가 남는 것을 허용하지 않습니다. 어떤 경우에는 도구가 지원한다면 억제(suppression)를 추가할 수도 있습니다(예: valgrind, DrMemory). 일부 경고는 비활성화할 수 있습니다. 예외적인 경우 유일한 '해결책'은 정적 코드 검사기의 한계로 인한 오탐(false positive)을 피하기 위해 코드를 리팩토링하는 것입니다. 답답하지만 출력에 경고를 남기는 것보다는 이 방법을 선호합니다. 경고는 무시되는 경향이 있고 다른 경고를 숨길 위험을 높이기 때문입니다.
Q: QA 테스트가 잘못되었다고 생각합니다
A: 정말 그렇게 생각한다면 개선 방법을 논의할 수 있습니다. 하지만 너무 성급하게 결론을 내리지 마세요. 대부분의 경우 코드 쪽이 잘못된 것으로 밝혀집니다.
Q: 기여자 라이선스 동의서에 서명해야 하나요?
A: 네, Suricata의 소유권을 한 곳, 즉 Open Information Security Foundation이 보유하도록 하기 위해 그렇게 합니다. http://suricata.io/about/open-source/ 및 http://suricata.io/about/contribution-agreement/를 참조하세요.