TrapCLI
TrapCLI to pomocnicza aplikacja, która znajduje się w każdej pułapce. Obsługuje ona komunikacje pułapki z panelem TrapInit - zajmuje się m. in. wysyłaniem powiadomień czy obsługą sprawdzania statusu pułapki.
Autor pułapki powinien upewnić się, że TrapCLI jest poprawnie dodawany do obrazu pułapki, i używać wyłącznie TrapCLI do komunikacji z TrapInit.
Pobieranie
TrapCLI można pobrać z downloads.traptech.pl. Dostępna jest dla systemu Windows, oraz
Linux (w wersji dla systemów z glibc
i musl
).
Aplikację można pobierać za pomocą curl
, używając następujących adresów:
Windows:
https://downloads.traptech.pl/data/TrapCLI-v<wersja>.exe
Linux z
glibc
:https://downloads.traptech.pl/data/TrapCLI-v<wersja>
Linux z
musl
:https://downloads.traptech.pl/data/TrapCLI-musl-v<wersja>
<wersja>
należy zastąpić aktualną wersją TrapCLI - np. 1.2.2
.
Przykłady Dockerfile
Poniższe przykłady Dockerfile generują obraz zawierający TrapCLI w PATH
.
- Ubuntu
- Alpine
FROM curlimages/curl as trapcli
# Download and install TrapCLI
ARG TRAPCLI_VERSION=1.2.2
RUN curl -f https://downloads.traptech.pl/data/TrapCLI-v${TRAPCLI_VERSION} -o /home/curl_user/TrapCLI \
&& chmod +x /home/curl_user/TrapCLI
FROM ubuntu
COPY /home/curl_user/TrapCLI /usr/bin/TrapCLI
FROM curlimages/curl as trapcli
# Download and install TrapCLI
ARG TRAPCLI_VERSION=1.2.2
RUN curl -f https://downloads.traptech.pl/data/TrapCLI-musl-v${TRAPCLI_VERSION} -o /home/curl_user/TrapCLI \
&& chmod +x /home/curl_user/TrapCLI
FROM alpine
# These packages are needed on alpine to run TrapCLI
RUN apk add ca-certificates zlib libgcc libstdc++
COPY /home/curl_user/TrapCLI /usr/bin/TrapCLI
Dodatkowe zależności
Na systemie Windows nie powinna być wymagana instalacja żadnych dodatkowych zależności.
Większość dystrybucji korzystających z Linux'a z glibc
(m. in. Ubuntu) powinno również działać
bez dodatkowych pakietów. W razie problemów należy upewnić się, że na systemie znajdują się pakiety
ca-certificates
, zlib
i libstdc++
(lub ich odpowiedniki, w zależności od dystrybucji).
Na systemach Linux z musl
(takich jak Alpine) może być wymagane doinstalowanie dodatkowych
pakietów - ca-certificates
, zlib
, libgcc
i libstdc++
.
W przypadku obrazów bazujących na Alpine, następująca linijka w Dockerfile instaluje te pakiety:
RUN apk add ca-certificates zlib libgcc libstdc++
Korzystanie z narzędzia
TrapCLI do działania wymaga odpowiedniej konfiguracji, którą odczytuje z następujących zmiennych środowiskowych:
TRAP_LOG_ENDPOINT
TRAP_LOG_TOKEN
TRAPCLI_DISABLE_SSL_VALIDATION
Te zmienne środowiskowe są automatyczne ustawiane przez TrapInit w czasie tworzenia pułapki. Należy tylko pamiętać o przekazaniu ich do kontenera zawierającego TrapCLI.
Wykonujemy to w docker-compose.yml w taki sposób:
container_with_trapcli:
image: my-image
environment:
- TRAP_LOG_ENDPOINT
- TRAP_LOG_TOKEN
- TRAPCLI_DISABLE_SSL_VALIDATION
Główne funkcjonalności TrapCLI zawierają się w dwóch podkomendach daemon
i send-incident
.
Dokładny opis każdej komendy i dostępnych argumentów możemy uzyskać wywołując TrapCLI z flagą --help
:
$ TrapCLI --help
Description:
CLI used to communicate with TrapInit instance
to send incident and system logs
Usage:
TrapCLI [command] [options]
Options:
--version Show version information
-?, -h, --help Show help and usage information
Commands:
daemon Starts the CLI in daemon mode. Performs several function related to reporting trap status
send-incident Sends an incident notification to the TrapInit app.
daemon
daemon
uruchamia TrapCLI w trybie daemon (serwisu). W tym trybie TrapCLI cały czas działa, i wykonuje kilka
niezbędnych do poprawnego działania pułapki operacji, m. in. zbiera i wysyła informacje potrzebne do funkcjonalności inwestygacji,
czy wysyła wiadomość ping, potwierdzającą w panelu TrapInit że komunikacja z pułapką działa poprawnie.
W związku z tym w każdej pułapce przynajmniej jeden kontener musi uruchamiać podczas startu TrapCLI daemon
. Zwykle
powinien być to główny kontener pułapki, w którym zawiera się główna logika aplikacji.
Możemy uruchomić TrapCLI daemon
jako proces w tle, dzięki czemu jednocześnie możemy w kontenerze uruchomić główny
proces aplikacji. Możemy to zrobić jak w poniższym przykładzie:
# Upewnij się że TrapCLI jest pobrane i dostępne w kontenerze!
# & oznacza uruchomienie poprzedzającej komendy w tle
# Zakładamy że app.sh uruchamia proces aplikacji, może to być dowolna inna komenda
CMD TrapCLI daemon & ./app.sh
send-incident
send-incident
to komenda służąca do wysyłania incydentu do panelu TrapInit.
Pułapka powinna ją wywoływać kiedy potrzebne jest wysłanie incydentu. W większości
języków programowania można wywołać dowolną komendę w systemie - np. w Python za pomocą
subprocess.run
czy w Node za pomocą
child_process.exec
.
Do poprawnego wywołania komendy wymagane jest podanie nazwy incydentu (--name
), poziomu (--severity
) i IP klienta
który wywołał incident (--source-ip
).
$ TrapCLI send-incident --help
Description:
Sends an incident notification to the TrapInit app.
Usage:
TrapCLI send-incident [options]
Options:
-n, --name <name> (REQUIRED) Name of the created incident
-d, --description <description> Description of the created incident
-s, --severity <Attempt|Ignored|Incident|Info> (REQUIRED) Severity of the created incident
-i, --ip, --source-ip <source-ip> (REQUIRED) Source IP of the connection that triggered the incident
-b, --bait-dynamic-value, --bait-value <bait-dynamic-value> Dynamic value used to inform which bait triggered the incident
-c, --custom-data <custom-data> Custom data to show about the incident
-?, -h, --help Show help and usage information