Zimbra – ukrywanie niechcianych nagłówków w mailach

Tworzymy plik

$ su zimbra
$ touch /opt/zimbra/conf/custom_header_checks

Dodajemy go do konfiguracji Zimbry

$ zmprov mcf zimbraMtaHeaderChecks 'pcre:/opt/zimbra/conf/postfix_header_checks  pcre:/opt/zimbra/conf/custom_header_checks'
$ zmprov mcf zimbraMtaBlockedExtensionWarnRecipient FALSE

Sprawdzamy czy nowy plik z regułami testowania nagłówka został pobrany przez Zimbra:

$ postconf | grep header_checks
header_checks = pcre:/opt/zimbra/conf/postfix_header_checks, pcre:/opt/zimbra/conf/custom_header_checks
...

Dodajemy nagłówki które chcemy ignorować do pliku custom_header_checks

$ nano /opt/zimbra/conf/custom_header_checks

/^Received: from localhost/     IGNORE
/^Received:.*with ESMTPSA/      IGNORE
/^User-Agent:/     IGNORE

Restartujemy MTA

$ zmmtactl restart

Na podstawie: https://wiki.zimbra.com/wiki/How_to_disable_various_headers

Security Onion – Zarządzanie regułami NIDS

Uzyskiwanie listy kategorii reguł zainstalowanych w naszym systemie:

$ cut -d\" -f2 /opt/so/rules/nids/all.rules | grep -v "^$" | grep -v "^#" | awk '{print $1, $2}'|sort |uniq -c |sort -nr

Wyłączanie reguł

Wyłączenie konkretnej kategorii używając wyrażeń regularnych

 $ sudo so-rule disabled add 're:GPL TELNET'

Wyłączenie reguły według wybranego SID reguły

$ sudo so-rule disabled add 222222

Sprawdzenie listy wyłączonych reguł

$ sudo so-rule disabled list

Aby mieć pewność, możemy sprawdzić czy reguła została zakomentowana w /opt/so/rules/nids/all.rules

$ grep 222222 /opt/so/rules/nids/all.rules

Wsystkie te wyjątki zapisywane są do pliku /opt/so/saltstack/local/pillar/minions/<managername>_<role>.sls do sekcji idstools

Progowanie i wyciszanie reguł

Możemy wyciszyć i ustawiać progi wywołania alertów dodając do pliku /opt/so/saltstack/local/pillar/global.sls lub /opt/so/saltstack/local/pillar/minions/<MINION_ID>.sls sekcję thresholding

Progowanie:

thresholding:
  sids:
    8675309:
      - threshold:
          gen_id: 1
          type: threshold
          track: <by_src | by_dst>
          count: 10
          seconds: 10

Wyciszenie:

thresholding:
  sids:
    8675309:
      - suppress:
          gen_id: 1
          track: <by_src | by_dst | by_either>
          ip: <ip | subnet>

Po zmianie w plikach .sls musimy ponownie uruchomić Suriacata.

$ sudo sudo so-suricata-restart <--force>

Na podstawie https://docs.securityonion.net/en/2.3/managing-alerts.html

Security Onion – Elasticsearch parsowanie logów z syslog

You need to add a widget, row, or prebuilt layout before you’ll see anything here. 🙂

W Security Onion 2 Elasticsearch otrzymuje nieprzeanalizowane logi z Logstash lub Filebeat . Elasticsearch analizuje i przechowuje te logi. Parsery są przechowywane w /opt/so/conf/elasticsearch/ingest/. Własne parsery można umieścić w /opt/so/saltstack/local/salt/elasticsearch/files/ingest/. Jeżeli twój parser będzie posiadał nazwę identyczną ze standardową to zostanie nadpisany.

Do parsowania logów używamy różnych procesorów. Jednym z nich jest Grok. Pisząc lub edytując własny parser z użyciem Grok możemy skorzystać z debugera w Kibana > Dev Tools > Grok Debugger

„Sample Data” – to fragment logów który parsujemy
„Grok Pattern” – wzorzec
„Custom Patterns” – wzorce niestandardowe używane w Grok pattern.

W Grok pattern możemy użyć też standardowych wzorców.

Na podstawie wzorca zmodyfikowałem plik /opt/so/conf/elasticsearch/ingest/syslog zapisując go w /opt/so/saltstack/local/salt/elasticsearch/files/ingest/syslog, aby prawidłowo parsował mój log „<132>Aug 17 16:11:31:000 2022 switch MODULE_UTILS_SSH/5/:SSH: User admin login successfully from x.x.x.x”

{
  "description" : "syslog pipeline",
  "processors" : [
    {
      "dissect": {
        "field": "message",
        "pattern" : "%{message}",
        "on_failure": [ { "drop" : { } } ]
      },
      "remove": {
        "field": [ "type", "agent" ],
        "ignore_failure": true
      }
    }, {
      "grok": {
        "field": "message",
          "patterns": [
            "^<%{INT:syslog.priority:int}>%{TIMESTAMP_ISO8601:syslog.timestamp} +%{IPORHOST:syslog.host} +%{PROG:syslog.program}(?:\\[%{POSINT:syslog.pid:int}\\])?: %{GREEDYDATA:real_message}$",

            "^<%{INT:syslog.priority}>%{DATA:syslog.timestamp} %{WORD:source.application}(\\[%{DATA:pid}\\])?: %{GREEDYDATA:real_message}$",

            "^%{SYSLOGTIMESTAMP:syslog.timestamp} %{SYSLOGHOST:syslog.host} %{SYSLOGPROG:syslog.program}: CEF:0\\|%{DATA:vendor}\\|%{DATA:product}\\|%{GREEDYDATA:message2}$",

            "^<%{INT:syslog.priority:int}>%{DATE_MY:syslog.timestamp} +%{IPORHOST:syslog.host} %{GREEDYDATA:real_message}$"

          ],

          "pattern_definitions" : {
            "DATE_MY" : "%{MONTH} %{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND}:%{INT} %{YEAR}"
          },
          "ignore_failure": true
      }
    },
    {
      "convert" : {
        "if": "ctx?.syslog?.priority != null",
        "field" : "syslog.priority",
        "type": "integer"
      }
    },
    {
...

Patterns są przetwarzane od góry do doły aż zostanie znaleziony pasujący wzorzec.

Aby zmiany zostały uwzględnione przeładowałem Elasticsearch:

$ sudo so-elasticsearch-restart

Wazuh – Indeksowanie i przeglądanie wszystkich logów

W Wazuh domyślnie można przeglądać tylko logi z rozpoznanych alertów. Możemy jednak tak ustawić aby Wazuh indeksował i umożliwił przeglądanie wszystkich wysyłanych do niego logów.

w pliku konfiguracji /var/ossec/etc/ossec.conf ustawiamy

# nano /var/ossec/etc/ossec.conf

<logall_json>yes</logall_json>

# systemctl restart wazuh-manager 

Zmieniamy konfigurację Filebeat aby czytał i wysyłał alerty i archiwa

# nano /etc/filebeat/filebeat.yml

filebeat.modules:
 - module: wazuh
  alerts:
   enabled: true
  archives:
   enabled: true

# systemctl restart filebeat

Logujemy się do dashboard Wazuh i dodajemy wzór indeksu.

Menu -> Management -> Stack Management -> Index Patterns -> Create index pattern

  1. W polu „Index pattern name” wpisujemy wazuh-archives-* i naciskamy „Next”
  2. W polu „timestamp” wybieramy „timestamp” ale nie „@timestamp”
  3. Wybieramy „Create index pattern”

Teraz w „Security events” po prawej stronie u góry możemy wybierać wzór indexu „Index pattern”

Bacula – SD Calls Client

W niektórych konfiguracjach sieciowych, gdzie klient bacula-fd jest w podsieci z której nie ma dostępu do repozytorium bacula-sd możemy odwrócić połączenie i to bacula-sd nawiązuje połączenie z clientem bacula-fd. Dzieki takiej konfiguracji ewentualny zainfekowany klient nie będzie miał dostępu do repozytorium bacula-sd.

W konfiguracji bacula-dir.conf w sekcji Client dodajemy SDCallsClient = yes

Client {
  Name = SerwerPlikow
  Address = X.X.X.X
  FDPort = 9102

  AutoPrune = no               
  . . . 
  SDCallsClient = yes
}

Data Domain – Ręczne czyszczenie file systemu

Operacja czyszczenia file systemu, odzyskuje fizyczną pamięć zajmowaną przez usunięte obiekty w systemie plików Data Domain. Gdy oprogramowanie aplikacji wygaśnie, obrazy kopii zapasowych lub archiwalnych i gdy obrazy nie są obecne w migawce, obrazy nie są dostępne lub nie można ich odzyskać z aplikacji lub migawki, dane nadal zajmują fizyczną pamięć masową. Data Domain okresowo sam czyści file system, ale możemy wykonać ręczne czyszczenie z poziomu CLI.

Połacz się z Data Domain przez ssh

$ filesys show space #sprawdza wolne miejsce
$ filesys clean start #uruchomienie czyszczenia
$ filesys clean watch #podgląd procesu

Fortigate – minimalna wersja ssl/tls. Tryb proxy

Niektóre strony internetowe nadal pracują w starszej wersji ssl/tls. Jeżeli nasza polityka firewall pracuje w trybie proxy, to takie połączenie może nie zostać zrealizowane prawidłowo.

Możemy obniżyć minimalną wersję ssl/tls na profilu ssl-ssh, który wykorzystujemy w naszej polityce firewall.

$ config firewall ssl-ssh-profile
$ edit <nazwa_profilu_ssl-ssh>
$ config https
$ set min-allowed-ssl-version tls-1.0
$ end 

Fortigate Cli – session filter

Przeglądanie i usuwanie sesji z poziomu cli

$ diagnose sys session filter ?

vd                Index of virtual domain. -1 matches all.
vd-name           Name of virtual domain. -1 or "any" matches all.
sintf             Source interface.
dintf             Destination interface.
src               Source IP address.
nsrc              NAT'd source ip address
dst               Destination IP address.
proto             Protocol number.
sport             Source port.
nport             NAT'd source port
dport             Destination port.
policy            Policy ID.
expire            expire
duration          duration
proto-state       Protocol state.
session-state1    Session state1.
session-state2    Session state2.
ext-src           Add a source address to the extended match list.
ext-dst           Add a destination address to the extended match list.
ext-src-negate    Add a source address to the negated extended match list.
ext-dst-negate    Add a destination address to the negated extended match list.
clear             Clear session filter.
negate            Inverse filter.

Ustawiamy filtry, i możemy podglądnąć i skasować sesje. Jeżeli żadne filtry nie będą ustawione, zostaną skasowane wszystkie sesje (wszystkie).

# ustawiamy filtr sesji np:
$ diagnose sys session filter src 192.168.1.1 192.168.1.255

# podgląd ustawionych filtrów
$ diagnose sys session filter
session filter:
        ...

        source ip: 192.168.1.1-192.168.1.255
        ...

# podgląd sesji
$ diagnose sys session list
...

# usuwanie wyfiltrowanych sesji
$ diagnose sys session clear

# usuwanie ustawionych filtrów
$ diagnose sys session filter clear