NFsec Logo

Używanie xattr w macOS jak rasowe APT

28/11/2024 w Bezpieczeństwo Możliwość komentowania Używanie xattr w macOS jak rasowe APT została wyłączona

X

attr, czyli rozszerzone atrybuty (ang. e[x]tended [attr]ibutes) to polecenie, które pozwala w systemach typu Unix, takich jak macOS przechowywać dodatkowe metadane plików w systemie. Podobnie jak w przypadku ADS (ang. Alternate Data Streams) dla systemu Windows funkcjonalność ta umożliwia atakującym ukrywanie danych w systemie plików bez widocznej zmiany zawartości plików. Ostatnia analiza arsenału grupy APT Lazarus pokazuje, że używanie narzędzi tego typu jest często pomijanym wektorem w współczesnych cyberatakach. W systemie macOS xattr jest często używany do przechowywania danych, takich jak tagi menedżera Finder, informacje o kwarantannie plików i metadane wyszukiwania Spotlight. Chociaż atrybuty te są zazwyczaj nieszkodliwe i pomagają poprawić funkcjonalność systemu, atakujący mogą je wykorzystać do ukrycia złośliwych danych na widoku.
[ czytaj całość… ]

Wykrywanie procesu debugowania w systemie Linux

21/11/2024 w Bezpieczeństwo, Debug Możliwość komentowania Wykrywanie procesu debugowania w systemie Linux została wyłączona

P

roces debugowania (ang. debugging) polega na kontrolowanym wykonaniu programu pod nadzorem debugera. Podobnie wygląda proces śledzenia (ang. tracing), który działa zarówno w trybie debugowania, jak i rejestrowania wybranych zdarzeń w czasie rzeczywistym. W systemie Linux często możemy spotkać się z tego typu czynnościami w kontekście podsłuchiwania innych procesów. Zatem pozostaje pytanie, czy istnieje możliwość sprawdzenia czy dany proces jest aktualnie poddawany procesowi śledzenia lub debugowania? Otóż każdy uruchamiany proces może zajrzeć do ścieżki /proc/self/status i sprawdzić, czy klucz TracerPid ma inną wartość niż 0:

agresor@darkstar:~$ cd /proc/self; cat status | egrep -B7 ^TracerPid
Name:	bash
Umask:	0022
State:	S (sleeping)
Tgid:	2998765
Ngid:	0
Pid:	2998765
PPid:	2998764
TracerPid:	0

ponieważ wiersz “TracerPid” z wartością “0” oznacza, że żaden proces nie “śledzi” tego procesu. Za pomocą języka Python możemy napisać prosty skrypt o nazwie show_debbuger.py, który sprawdzi czy aktualnie w systemie jest uruchomiony jakiś proces, który jest śledzony i poda nam jego dane:

#!/usr/bin/env python3
# Debugger detector v0.1

import os
import re

def show_debugger(proc_path: str):
    pid_list, pid_found = [], []
    for pid in os.listdir(proc_path):
        if os.path.isdir(os.path.join(proc_path, pid)) and pid.isnumeric():
            pid_list.append(pid)
    for pid_number in pid_list:
        full_path = os.path.join(proc_path, pid_number, 'status')
        if os.path.isfile(full_path):
            with open(full_path, 'r') as proc_file:
                status_file = proc_file.read()
                tracer_pid = re.search(r'(?P<name>TracerPid.*)\s+(?P<pid>\d+)',
                                       status_file).group('pid')
            if tracer_pid != '0':
                process_name = re.search(r'Name:\s+(?P<name>\w+)',
                                         status_file).group('name')
                tracer_path = os.path.join(proc_path, tracer_pid, 'status')
                with open(tracer_path, 'r') as tracer_file:
                    status_file = tracer_file.read()
                    tracer_name = re.search(r'Name:\s+(?P<name>\w+)',
                                            status_file).group('name')
                print(f'Process: {process_name} with PID: {pid_number} is traced with:'
                      f' {tracer_name} with PID: {tracer_pid}')
                pid_found.append(pid_number)
    if pid_found:
                return True
    else:
        print('No process tracing found!')
        return False


if __name__ == '__main__':
    show_debugger('/proc')

W pierwszej konsoli możemy sprawdzić czysty system:

root@darkstar:~#./show_debbuger.py
No process tracing found!

W drugiej konsoli uruchamiamy strace na dowolnym procesie i uruchamiamy skrypt ponownie:

root@darkstar:~#./show_debbuger.py
Process: sshd with PID: 2055265 is traced with: strace with PID: 2061163

Dokładamy jeszcze gdb ponownie sprawdzając system:

root@darkstar:~#./show_debbuger.py
Process: multipathd with PID: 352 is traced with: gdb with PID: 2061871
Process: sshd with PID: 2055265 is traced with: strace with PID: 2061163

Zawsze też możemy wyłączyć możliwość śledzenia w systemie.

Więcej informacji: Detecting the Presence of a Debugger in Linux, How do you detect that you’re being ptraced?

Lets Encrypt najpopularniejszym dostawcą TLS w top 750.000 popularnych domen

17/11/2024 w Techblog Możliwość komentowania Lets Encrypt najpopularniejszym dostawcą TLS w top 750.000 popularnych domen została wyłączona

C

loudflare udostępnił publicznie usługę Radar, w której są zawarte dane o rankingu domen: Domian Rankings Worldwide. Tutaj należy mieć świadomość, że dane pochodzą z ich publicznego serwera DNS, z którego nie koniecznie musi korzystać cały internet. Niemniej jednak jest to dobra próbka, aby przeprowadzić eksperyment podobny do analiz nagłówka HTTP. W pliku pobranym 28.09.2024 znalazło się 1.008.856 domen. Finalnie udało połączyć się z 750.892 domenami w celu pobrania informacji o ich certyfikacie TLS. Aby szybko pozyskać te dane został zmodyfikowany kod skryptu httpsrvreaper na bazie którego powstał sslsrvreaper. Jest on na tyle prosty, że czyta z pliku tekstowego domains.txt adresy, z jakimi ma się połączyć i zapisać ich metadane TLS w formacie JSON, na przykład:
[ czytaj całość… ]

Tani bruteforce subdomen za pomocą dig i xargs

29/10/2024 w CmdLineFu, Pen Test Możliwość komentowania Tani bruteforce subdomen za pomocą dig i xargs została wyłączona

Nie musimy ściągać wyrafinowanych narzędzi do enumeracji subdomen wybranej domeny. Powinna wystarczyć nam dobra lista oraz dwa narzędzia, które bardzo często znaleźć zainstalowane w systemie Linux: dig oraz xargs:

$ wc -l subdomians.txt
100 subdomians.txt

$ time cat subdomians.txt | xargs -P0 -I subdomain dig +noall subdomain.nfsec.pl +answer
www.nfsec.pl.		3600	IN	CNAME	nfsec.pl.
nfsec.pl.		3600	IN	A	146.59.92.70
ns1.nfsec.pl.		3600	IN	A	146.59.92.70
ns2.nfsec.pl.		3600	IN	A	213.251.188.141
ns3.nfsec.pl.		3600	IN	A	46.105.206.200
ns4.nfsec.pl.		3600	IN	A	46.105.207.200

real	0m0.390s
user	0m0.764s
sys	0m0.599s

If max-procs (-P) is 0, xargs will run as many processes as possible at a time.

Więcej informacji: Hostname bruteforcing on the cheap

Prosty trick, aby ukryć prawdziwą nazwę procesu

27/10/2024 w CmdLineFu, Hacks & Scripts Możliwość komentowania Prosty trick, aby ukryć prawdziwą nazwę procesu została wyłączona

// sleeper.c

#include 
#include 

int main()
{

    sleep(60);
    printf("Infecting Linux Host.");
    return 0;
}
agresor@darkstar:~$ gcc -o sleeper sleeper.c
agresor@darkstar:~$ exec -a '/lib/systemd/systemd --abuse' ./sleeper &
[1] 5354
agresor@darkstar:~$ ps x
    PID TTY      STAT   TIME COMMAND
   4925 ?        Ss     0:00 /lib/systemd/systemd --user
   4926 ?        S      0:00 (sd-pam)
   4988 ?        R      0:00 sshd: agresor@pts/0
   4989 pts/0    Ss     0:00 -bash
   5354 pts/0    S      0:00 /lib/systemd/systemd --abuse
   5357 pts/0    R+     0:00 ps x

Należy mieć na uwadze, że exec najlepiej w tym przypadku działa z plikami binarnymi. I bardzo prosto wykryć ten trick:

agresor@darkstar:~$ ls -al /proc/5354/exe
lrwxrwxrwx 1 agresor agresor 0 Oct 27 19:24 /proc/5354/exe -> /home/agresor/sleeper
agresor@darkstar:~$ cat /proc/5354/cmdline
/lib/systemd/systemd --abuse
agresor@darkstar:~$ cat /proc/5354/comm
sleeper

Więcej informacji: Why isn’t `exec -a` working the way I expect?

Zawieszone rekordy DNS

20/10/2024 w Bezpieczeństwo Możliwość komentowania Zawieszone rekordy DNS została wyłączona

W

celu zrozumienia jak powstają zawieszone rekordy DNS (ang. dangling DNS records) należy posiadać podstawową widzę na temat działania usługi DNS, która tłumaczy przyjazne dla użytkowników nazwy domen, takie jak nfsec.pl (łatwe do zapamiętania i rozpoznania) na numeryczne adresy IP. Adresy IP dla każdej domeny są przechowywane na autorytatywnych serwerach DNS, które można porównać do książek telefonicznych w internecie. Po wpisaniu adresu strony internetowej w przeglądarce, przeglądarka na początku łączy się z rekurencyjnym serwerem DNS i zadaje pytanie: “Jaki jest adres IP nfsec.pl?”. Rekursywny serwer DNS wysyła zapytanie do serwera autorytatywnego w celu uzyskania odpowiedzi (oczywiście to trochę bardziej skomplikowane).
[ czytaj całość… ]

TELFHASH – Trend Micro ELF Hash

29/09/2024 w Bezpieczeństwo Możliwość komentowania TELFHASH – Trend Micro ELF Hash została wyłączona

Telfhash to funkcja haszująca używanych symboli dla plików ELF w systemie *nix, tak jak imphash to funkcja haszująca importowanych bibliotek dla plików PE w systemie Windows. Za jej pomocą możemy grupować pliki ELF według podobieństwa na podstawie ich tabeli symboli. Pozwala to na byciu na bieżąco ze wszystkimi wariantami szkodliwego oprogramowania (ang. malware), które są stale rozwijane i dokładne grupowanie zgodnie z ich rzeczywistą rodziną pochodzenia np. Tsunami, Gafgyt, czy Mirai. Telfhash do swoich obliczeń używa TLSH, co umożliwia mu rozpoznawanie oryginalnych próbek, nawet gdy zostały dodane do nich nowe funkcje importujące nowe biblioteki. Jeśli rozebrany i statycznie skompilowany plik binarny nie ma symboli, telfhash emuluje je poprzez uzyskanie i stworzenie listy z adresów docelowych dla wywołań funkcji.
[ czytaj całość… ]

Uciekając z sudo – część szósta

24/09/2024 w Bezpieczeństwo Możliwość komentowania Uciekając z sudo – część szósta została wyłączona

P

oprzez wykorzystanie dowolnych komentarzy zawierających specjalny znak nowej linii: “\n” i za pośrednictwem poleceń iptables oraz iptables-save możemy nadpisać dowolny plik z prawami administratora i częściowo kontrolować zapisane wiersze – częściowo, ponieważ moduł komentarzy w iptables pozwala na umieszczenie 256 znaków, a zapis pliku poprzez iptables-save wprowadza pewne dane z utworzonych reguł zapory ogniowej (ang. firewall), które są dodawane przed i po wstrzykniętym komentarzu. W systemie Linux jest przynajmniej jeden plik, który nie przejmuje się niepotrzebnymi wierszami i je ignoruje, a jest nim (nie)sławny plik /etc/passwd.
[ czytaj całość… ]

Zaciemnianie poleceń w powłoce bash

15/09/2024 w Hacks & Scripts, Pen Test Możliwość komentowania Zaciemnianie poleceń w powłoce bash została wyłączona

P

owłoka bash zawiera wiele funkcji, które pojawiają się w innych popularnych powłokach, a także niektóre funkcje, które są tylko w niej. Dzięki rozbudowanej składni pozwala na pisanie skryptów w wewnętrznym języku programowania, a jego elementy upraszczają pracę w codziennej pracy z wydawanymi poleceniami np. touch {exploit,payload}.{c,sh} tworzy jednym poleceniem cztery pliki: exploit.c, exploit.sh, payload.c, payload.sh. Dzięki temu jedno polecenie może zostać wydane na wiele różnych sposobów używając techniki zaciemnienia / obfuskacji (ang. obfuscation), która zmienia składnię polecenia, ale zachowuje jego semantykę jednocześnie utrudniając jego zrozumienie i umożliwiając ominięcie różnego rodzaju filtrów i mechanizmów detekcyjnych. Na przykład popularne polecenie, takie jak:

cat /etc/passwd

może zostać zapisane na wiele różnych sposobów dając ten sam wynik:

cat /et\
c/pa\
sswd

cat${IFS}/etc/passwd

IFS=,;`cat<<<cat,/etc/passwd`

{cat,/etc/passwd}

cat</etc/passwd

X=$'cat\x20/etc/passwd'&&$X

cat ${HOME:0:1}etc${HOME:0:1}passwd

{\c''\a""t,/e''*?/?a?s??}

{\c''\a""\t,/\e''*?/\p*w\d}

{$'\x63'\a$'\x74',/\e''*?/\p*w$'\x64'}

{/b??/g?e?,.,/e??/p?s??d}

$(echo {/b??/ge*n''t,\p\a\s\s\w\d})

$(echo cat /etc/[p][a][s][s][w][d])

cat `echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"`

hex=(63 61 74 20 2F 65 74 63 2F 70 61 73 73 77 64) \ 
echo $(for i in ${hex[@]}; do echo -n -e "\x$i"; done) | sh

cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd

showme=/ehhh/hmtc/pahhh/hmsswd&&cat ${showme//hhh\/hm/}

Przykłady te wykorzystują znak ucieczki dla nowej linii, separator pól wejściowych, przekierowania strumieni, notację ANSI-C, podstawianie poleceń, rozbudowę klamry, manipulację ciągami tekstowymi, symbole wieloznaczne, wyrażenia regularne z nawiasami kwadratowymi, przekształcanie oraz rozszerzanie parametrów powłoki. Możliwości zapisu poleceń w postaci alternatywnej zależy tylko od naszej kreatywności oraz poziomu zaawansowania umiejętności administracyjno-programistycznych w powłoce.

Więcej informacji: Extraction of wiki.bash-hackers.org from the Wayback Machine

Atak, wykrywanie i informatyka śledcza na żywo w systemie Linux

18/07/2024 w Bezpieczeństwo, Pen Test, Techblog Możliwość komentowania Atak, wykrywanie i informatyka śledcza na żywo w systemie Linux została wyłączona

O

statnio miałem okazję wziąć udział w szkoleniu, które przygotował Leszek Miś pt. “Linux Attack, Detection and Live Forensics + 90 Days PurpleLabs Access” (całość jest w języku angielskim) – jest to jedno z niewielu dostępnych szkoleń, które jest w 100% skupione na systemie operacyjnym Linux. Po otrzymaniu dostępu do platformy szkoleniowej oraz laboratorium czekało na mnie 225 tematów do opracowania – kilka z nich można oczywiście odjąć z technicznego punktu widzenia, ponieważ są to tematy wprowadzające / wyjaśniające zasady pracy z kursem i maszynami do testów. Niemniej dobór materiału jest naprawdę spory i stanowi solidny fundament do nauki technik atakowania i obrony systemu Linux. Przy pierwszej styczności z mapą zagadnień od razu przypomniała mi się pierwsza, kupiona książka w tym temacie, czyli “Linux. Agresja i Ochrona” wydawnictwa Robomatic (ISBN: 838715041X) – tylko tym razem materiał można od razu przećwiczyć na gotowych scenariuszach i nie użyjemy już do tego SATANa.

Ponieważ dostęp do materiałów jest nieograniczony, ale dostęp do infrastruktury labów trwa aż 90 dni – podzieliłem sobie cały material od 3 do 5 zagadnień dziennie, aby mieć wolne niektóre weekendy oraz zapas czasu w przypadku braku możliwości wieczornej nauki w tygodniu. Pierwsze dni zostały poświęcone na sprawdzenie wszystkich dostępów oraz przygotowanego ekosystemu. Na początku “skakanie” po infrastrukturze może wydawać się trochę uciążliwe, ale posiadając do dyspozycji agregator adresów i dostępów z czasem nabiera się wprawy. Kolejne kroki to już intensywne wgryzanie się w przedstawione scenariusze, opisy i narzędzia, z których można wynieść wiele wartościowych wniosków. To, co najbardziej spodobało mi się w szkoleniu to różnorodne podejście do całości. Podczas nauki poszczególnych rozdziałów otrzymujemy możliwość zapoznania się z technikami, taktykami i strukturami narzędzi ofensywnych używanych w atakowaniu Linuksa; polecenia i ekosystem pozwalający na przeprowadzanie polowań na poznane zagrożenia oraz zestaw stabilnych, darmowych rozwiązań, które możemy od razu przetestować jako warstwy do ochrony i wykrywania ataków na systemie Linux i jego komponentach. Wszystko to robimy na różnych poziomach (przestrzeni użytkownika / jądra) oraz warstwach (aplikacyjnych / sieciowych) systemu.

Listę poruszanych tematów możemy znaleźć na oficjalnej stronie szkolenia (prowadzony jest nawet jego changelog). Wiele z nich jest poruszone w sposób wyczerpujący, a niektóre dają bardzo mocne podstawy do dalszej eksploracji tematu czy zagadnień przewijających się w nich przy okazji. Jeśli znajdziemy jakieś błędy lub dezaktualizację to możemy je zgłaszać na adres e-mail lub jako komentarz pod konkretnym zadaniem. Mi przy okazji paru znajdek udało się zamienić kilka zdań z autorem, a ponieważ wpis ten nie jest w żaden sposób sponsorowany – Leszek był tak miły, że dla 20‘stu zainteresowanych czytelników NF.sec przygotował kod dający 20% zniżki, który można wykorzystać do 15.08.2024 r. Jeśli zakres materiału Was przekonuje to ze swojej strony mogę polecić tę pozycję na ścieżce doskonalenia swojego warsztatu z bezpieczeństwa systemu Linux.