Full Transcript

·YouTLDR

OMH 2025: Marcin Dudek, Piotr Zarzycki - Od zera do AI pentestera

42:04EnglishTranscribed Jul 26, 2026
0:00

temat pod tytułem od zera do AI

0:03

Pentestera.

0:05

Przywitajmy ich brawami.

0:09

[aplauz]

0:12

>> Cześć wszystkim. Ja nazywam się Marcin

0:14

Dudek.

0:14

>> Cześć. Ja jestem Piotrek Zarzycki.

0:16

>> Powiemy wam dzisiaj o naszej przygodzie

0:18

z AIem. Jest to przygoda, gdzie

0:20

zaczęliśmy od zera. Nie mieliśmy żadnej

0:21

wiedzy w tym temacie, jakie zgłaszaliśmy

0:23

z tą prezentacją. y trochę to było

0:25

oszukaństwem względem pewnie rady

0:26

programowej, chociaż napisaliśmy to w

0:28

naszym CFPS nie jesteśmy ekspertami w

0:30

tym temacie, ale myślę, że to będzie

0:32

fajna przygoda też dla was i dla was

0:34

taka informacja jak można w ciągu

0:36

miesiąca się rozwinąć w takim obszarze.

0:39

Podzieliliśmy naszą prezentację na akty,

0:41

żeby wam trochę ułatwić nadążanie za

0:42

tym, co się będzie działo. Tak naprawdę

0:44

to są dwie prezentacje w jednej, bo z

0:46

dwóch perspektyw całkowicie to

0:47

robiliśmy, więc macie bonusową

0:49

prezentację. Jesteście na jednej, a

0:50

będziecie mieli dwie. Yyy, skąd w ogóle

0:53

się pomysł wziął na taką prezentację? Ja

0:54

na początku tego roku jeszcze mocno nie

0:57

wierzyłem w AI. Znaczy słyszałem o tym w

0:59

wielu miejscach, ale raczej miałem takie

1:00

podejście, że no gdzieś jakaś nowinka,

1:03

fajnie, że to jest, ale zanim będziemy

1:04

tego używali, to jeszcze długo i zanim

1:06

będzie dawało jakieś sensowne efekty, to

1:08

jeszcze długo. Po czym pojechałem do

1:10

Stanów na Blackta i Defcona w tym roku w

1:12

kwietniu i okazało się, że 1/3

1:14

prezentacji miała gdzieś ten motyw AI i

1:16

wykorzystania go w naszej branży. I to

1:18

nie nie mówię nawet tylko o

1:19

bezpieczeństwie AI, o czym jest dużo,

1:20

czyli jakieś tam prop, gu

1:23

takim typowym bezpieczeństwie AI, czyli

1:25

jak zabezpieczać modele, żeby nie były

1:26

dane z nich wyciągane, ale o tym jak AI

1:28

może być używane w naszej branży. Yyy,

1:31

no i o tym się trochę mało mówiło, a tam

1:33

było tego dużo. Trafiłem na taką

1:36

prezentację, gdzie człowiek opowiadał o

1:38

tym, jak zmuszali agenty, żeby black

1:41

boxowo testowały oprogramowanie, zarówno

1:44

black boxowo, jak i white boxowo. i

1:46

powiedzieli, że główny problem są

1:47

halucynacje. No ja wtedy też tak jakby z

1:49

przesłuchów gdzieś tam słyszałem, że to

1:50

jest główny czynnik, czemu ludzie tego

1:52

nie używają. I oni dali taki pomysł, że

1:54

wrzucają flagi w bazę danych, w system

1:56

plików, w różne miejsca na stronach tej

1:59

aplikacji i każą modelowi, agentowi

2:02

szukać tego tak długo, aż nie znajdzie

2:04

flagi. I traktuj to jako CTF. I

2:06

faktycznie, że znajdowali tym CVE,

2:07

znajdowali zeodę, brali w Back Bounty i

2:10

im się to sprawdzało. No i dla mnie to

2:11

był taki moment wow, że faktycznie ma to

2:14

praktycznie zastosowanie. Udaje się

2:16

jakoś zmusić tego LLMa, żeby dobrze

2:18

działał. Tylko kwestia jest jak to jak

2:20

to mądrze wymyślić, żeby żeby on

2:23

działał. Jednocześnie mnóstwo różnych

2:26

takich doniesień medialnych o tym ile

2:27

pieniędzy jest ładowane i jak każda

2:29

firma wchodzi w tematykę AI. może kozyć

2:32

AI XCC to też na Devconie był finał,

2:34

gdzie 30 milionów dolarów było

2:35

przeznaczone nagrody dla zespołów, które

2:37

tworzą autonomiczne agenty, które

2:39

atakują i bronią aplikacje między innymi

2:42

z wykorzystaniem AI. y też taki takie

2:45

narzędzie Xbow, które się chwali tym, że

2:47

na Hake zajęło pierwsze miejsce w danym

2:50

miesiącu właśnie na Backbounty i to są

2:53

tylko narzędzia oparte o AI, więc gdzieś

2:55

to wskazywało, że faktycznie jesteśmy w

2:57

takim momencie przełomowym, że to może

3:01

już mieć zastosowanie.

3:03

No i jak wyciłem ze Stanów zaczął się

3:04

zastanawiać jak w ten temat wejść. Nie

3:07

mam kompletnie na to czasu, bo obecnie

3:08

jestem kierownikiem C Polska, więc te

3:10

tematy techniczne w ciągu dnia są

3:12

mniejszością. Yyy i pomyślałem sobie, że

3:14

jeśli nie zmuszę się, żeby to zrobić,

3:17

czyli na przykład nie zgłoszę CFP na

3:18

konferencję i jak się dostanę, to będę

3:20

musiał się tego nauczyć i będę musiał

3:22

coś pokazać, no bo inaczej będzie słabo

3:24

i y i będzie yy no byście dzisiaj

3:26

przyszli i bym w zasadzie nic nie

3:28

powiedział, yyy to się do tego nie

3:29

zmuszę. Yyy i i taki był pomysł, ale

3:32

żeby trochę zmnieść to ryzyko, że że to

3:34

nie wypali, napisałem do do Piotrka

3:38

o tym, że może razem w to wejdziemy i

3:40

może razem wyruszymy w tą podróż.

3:43

Tak, zwłaszcza, że wcześniej mieliśmy z

3:45

Marcinem przygotować prezentację trochę

3:48

na inny temat. Mieliśmy pokazać o

3:49

zastosowaniach moje cert z tym, że

3:52

okazuje się, że dokładnie w tym samym

3:54

czasie teraz w sali obok kolega Marcina

3:57

Stertu ma prezentację dokładnie na ten

3:59

sam temat, więc ten no on miał

4:01

pierwszeństwo, pierwszy się zgłosił,

4:03

więc trochę odpuściliśmy, uznaliśmy, że

4:05

no na ohaku w tym roku nic nie powiemy,

4:08

aż był ostatni dzień CFP, godzina 23:00.

4:11

Ja dostaję wiadomość od Marcina. Ty

4:13

słuchaj, mam taki pomysł na prezentację.

4:14

Zupełnie się na tym nie znamy, ale może

4:16

o tym opowiemy.

4:19

I ja zrobiłem takie y

4:23

może i tak walczyłem trochę z sobą. Na

4:27

początku, odmówiłem, potem pisałem, że

4:28

trochę kusi. No może byśmy spróbowali.

4:31

No ale w końcu Marcin mnie namówił bez

4:34

namawiania mnie. A dlaczego udało mu się

4:36

mnie namówić? dlatego, że no o AIU mówią

4:38

wszyscy. Tak, gdzie nie pójdziemy, tam

4:40

słyszymy o nowy czat, o nowy model, o

4:42

nowe coś.

4:45

Więc fajnie, zwłaszcza, że jeżeli

4:47

wejdziemy na LinkedIna, to masa

4:49

ekspertów od Au na LinkedInie jest

4:53

naprawdę przytłaczająca. Nie da się

4:54

przeskollowować, żeby na jakiś post o

4:56

AIu nie trafić. No i też tak czułem, że

4:58

chciałem trochę w to wejść, zwłaszcza,

5:00

że widziałem jakieś zastosowania tego.

5:02

Ja w Orangeu zajmuję się między innymi

5:03

skanowaniem podatności w web

5:06

aplikacjach. Tych web aplikacji mamy

5:08

dość dużo, tak? To jest liczone w

5:10

setkach, może nawet w tysiącach.

5:13

I każdy, kto skanuje web aplikację w

5:15

sposób automatyczny wie, że te

5:17

zgłoszenia, te alerty krytyczne czy

5:20

wysokie to jest raczej rzadkość. To się

5:22

nie trafia. Jeżeli się trafia, to od

5:24

razu trzeba wiadom wiadomo, że ktoś musi

5:26

się tym zająć. Ale jest obszar, który

5:28

jest bardzo słabo zagospodarowany i to

5:30

są podatności niskie informacyjne, w

5:32

których też czasem coś jest ciekawego i

5:35

warto by było, żeby ktoś na to spojrzał

5:37

lub rzucił okiem. Tylko, że jeżeli mamy

5:40

tysiące aplikacji, to skala tego jest

5:43

nie do przerobienia dla człowieka, tak?

5:44

Bo tu mamy dziesiątki albo nawet setki

5:46

tysięcy informacji, znaczy podatności,

5:49

które są klasy klasyfikowane jako

5:52

informacje. Ja wiedziałem, że tego nie

5:53

przerobię jako człowiek, ale widziałem

5:55

tu jakieś zastosowanie właśnie dla lmów.

5:58

>> No i wysłałaliśmy CFP i 10 października

6:00

dostaliśmy maila. Gratulacje, y

6:03

zostaliśmy wybrani z naszą prezentacją.

6:06

Trochę jakby nie byliśmy przekonani, czy

6:08

zostaniemy wybrani, czy nie. No bo ten

6:09

opis faktycznie był taki, że my nie mamy

6:11

w tym wiedzy. przyznaliśmy się do tego,

6:13

no ale zostaliśmy, więc trzeba się jakoś

6:16

trzeba coś zrobić, trzeba coś pokazać.

6:18

To co wam pokazujemy dzisiaj. No i ta

6:19

prezentacja to jest taka taka droga od

6:21

tego momentu, jak my się dowiedzieliśmy,

6:23

że mamy to przygotować do dzisiaj. Yyy,

6:25

co po kolei robiliśmy, to będą kolejne

6:27

właśnie akty nasz rozwój w tym obszarze

6:29

wyglądał i do czego doszliśmy na na

6:31

końcu na dzień dzisiejszy. No więc

6:34

zaczynamy planowanie. No co trzeba, co

6:37

trzeba zrobić y na początku jakieś

6:39

założenia? Yyy, no bo bez założeń

6:41

byłoby, byłoby ciężko. Yyy, no

6:44

założenie, które jest wymuszone, czyli

6:46

że nie mamy tej wiedzy o AI i każdy

6:48

działa osobno. Chcieliśmy, żeby to było

6:49

tak, że pokażemy wam dwie historie,

6:51

gdzie w tym samym obszarze, czyli w

6:52

bezpieczeństwie web aplikacji można mieć

6:55

całkowicie inne podejścia. Mimo że taki

6:57

sam cel, takie same pomysły gdzieś

6:59

początkowe, potem mogą może się okazać,

7:00

że będą inne narzędzia czy w inny sposób

7:02

używane, co byłoby dużą wartością. Nie

7:04

wymieniamy się wiedzą w trakcie badań

7:06

właśnie po to, żeby tego nie zaburzyć.

7:07

Czyli my między sobą nie gadaliśmy przez

7:09

te ostatnie dwa miesiące. Dosłownie

7:11

tydzień temu mieliśmy cola, gdzie

7:13

pokazaliśmy sobie co nam wyszło yyy w

7:16

jaki sposób. A tak to w międzyczasie

7:18

tylko narzekaliśmy głównie, ale się

7:20

śmialiśmy czasami, że coś

7:21

>> nie wymienialiśmy się wiedzą. Nie

7:22

dlatego, że Cert Polska i Cert Orange

7:24

podobno ze sobą rywalizują,

7:27

tylko żeby to były dwa osobne badania,

7:29

>> tak? yyy i było bardzo mało czasu, więc

7:32

celem to był jakiś efekt i faktycznie

7:34

pokazanie, że się da, a nie głęboki więc

7:36

my nie jesteśmy specjalistami. Nie wiemy

7:38

jak to działa i czemu coś działa, jeśli

7:40

działa albo nie działa. Yyy, nie wiemy

7:42

jak to matematycznie wszystko y

7:43

funkcjonuje, ale jesteśmy w stanie tego

7:45

używać. Jesteśmy skrypt kidis, ale

7:47

pokażemy wam jak nimi zostaliśmy. No i

7:50

przede wszystkim to był dla nas temat

7:50

dodatkowy. Też nie mamy czasu. Znaczy

7:52

często ludzie mówią, że nie zajmujemy

7:54

się takimi tematami, bo nie mamy czasu.

7:56

My to robiliśmy po pracy, weekendami,

7:59

często wieczorami też mamy dzieci, żony

8:02

i różne wypadki losowe, które się

8:04

zdarzały w ciągu tego ostatniego czasu.

8:07

MZ dodatkowo wczoraj komputer przestał

8:08

działać w losowych momentach frezował

8:10

albo się wyłączał. Jeszcze mi się nie

8:12

udało dojść czemu Piotrkowi też się

8:14

komputer zepsuł tego slajdzie nie ma ale

8:16

było dużo dużo wypadków więc jakby

8:18

pokazuję to po żeby pokazać wam że każdy

8:21

z was może gdzieś ten czas

8:22

wygospodarować bo jak byłem na blackcie

8:24

to mnie do tego przekonał człowiek który

8:26

miał 80 lat i powiedział że on w

8:29

momencie jak internet wchodził to wtedy

8:31

swój biznes rozwijał i on jako jeden z

8:32

pierwszych wszedł właśnie wtedy w

8:33

internet ale ludzie dookoła mówili nie

8:35

no po co to jeszcze taki wczesny etap

8:36

tam nic ciekawego nie ma jakby co ty

8:38

będziesz robił przez ten internet jak

8:39

możesz sprzedawać na targu M a on

8:41

powiedział, że dopóki się czegoś nie

8:43

zacznie robić, to się nie widzi

8:44

zastosowań, więc to, że nie widzicie

8:47

zosowań dla AI, dla LMów, to nie znaczy,

8:49

że ich nie ma w waszym obszarze

8:50

działania, tylko po prostu zacznijcie

8:51

robić. Nie oglądajcie filmów, czytać

8:53

tutoriali, szkoleń i tak dalej. Po

8:56

prostu włączcie i używajcie.

9:01

No więc jeżeli już mieliśmy te nasze

9:03

wstępne założenia, to trzeba było się

9:05

zabrać do pracy. I

9:08

na początku, jeżeli mamy używać agentów

9:09

AI, musieliśmy sobie tak naprawdę się

9:12

dowiedzieć, czym są ci agenci AI. Tak,

9:14

no bo dużo się o tym mówi, a tak

9:16

naprawdę nie do końca miałem

9:17

przekonanie, co to jest, ale jak już się

9:20

dowiedziałem, co to jest, okazało się,

9:21

że ja jestem prekursorem w tej

9:22

dziedzinie zupełnie przypadkiem. Była

9:24

taka prezentacja na konfidensie w 2023

9:27

roku, gdzie opowiadałem jak w sposób

9:28

automatyczny można trollować z kamerów.

9:32

Ja tam sobie oprogramowałem w Pythonie

9:34

API do czatu GPT i ten mój skrypcik w

9:37

Pythonie pobierał maile, analizował ich

9:40

treść, klasyfikował czy to jest spam,

9:41

czy nie spam. Jeżeli wiadomość była

9:43

spamem, to generował odpowiedź na tą na

9:46

tego maila i go wysyłał z powrotem do

9:47

przestępcy. I tak sobie z tymi z

9:49

kamerami ten mój troll agent rozmawiał.

9:53

Najdłuższa rozmowa z tego co pamiętam to

9:55

było około 200 maili wymienionych z tymi

9:57

oszustami.

9:59

Więc w jaki sposób można agenta AI

10:02

zdefiniować? Tak to są takie

10:03

najpopularniejsze rzeczy, które się

10:04

przewijają, czyli odbiera informacje z

10:06

otoczenia, przetwarza te informacje w

10:08

sposób inteligentny, jakby to nie

10:10

brzmiało, jest autonomiczne albo działa

10:13

pod jakimś nadzorem człowieka, żeby nie

10:14

narobić krzywd. Sam podejmuje decyzje,

10:17

sam wykonuje działania i działa w sposób

10:19

ciągły.

10:20

>> No już przechodzę do mięsa. Moje

10:22

pierwsze zesknięcie to było z Clot Code.

10:24

Yyy, bardzo popularny agent. Yyy, wiele

10:27

osób go wtedy polecało jako takiego

10:28

najlepszego dla programistów, że on

10:30

najlepsze daje efekty, więc myślałem

10:31

sobie, że do pentestów też będzie pewnie

10:33

y niezły. No i na warsztat wziąłem yyy

10:36

taką popularną aplikację Dvenable Web

10:38

Application, która ma mnóstwo podatności

10:40

w sobie zaimplementowanych. Odpaliłem

10:42

prostego prompta na tej aplikacji i w

10:45

ciągu dosłownie kilku sekund wypluł mi

10:47

wszystkie podatności. Ja wtedy byłem

10:49

taki: "Wow, ale to zajebiście działa".

10:51

Te elementy to w ogóle jest [śmiech]

10:53

przyszłość i to jest w ogóle sinusoida,

10:55

który będę pokazywał przez całą

10:56

prezentację jak właśnie ta przygoda z

10:57

Lemami wyglądała.

11:01

Niestety okazało się, że po prostu on

11:03

wiedział o tej aplikacji, wiedział jak

11:04

ona działa, miał w swojej bazie wiedzy,

11:06

więc wiedział jakie tam są podatności,

11:08

jakby nie przeskanował jej, nie

11:09

przetestował tej aplikacji, więc no

11:12

trochę trochę zjechałem na tej na tej co

11:14

idzie w dół jednak z tym jak to wszystko

11:17

fajnie działa. Tak, ja takim pierwszy

11:20

pierwszym zastosowaniem to było to, co

11:22

wam powiedziałem, czyli raporty z

11:24

automatycznych testów bezpieczeństwa.

11:26

Chciałem jakoś zagospodarować te niskie

11:28

informacyjne podatności, które zostały

11:29

znalezione. No jako że są to jednak

11:31

podatności w systemach, nie chciałem

11:33

tego wypychać do chmury żadnej, tylko

11:34

chciałem to za pomocą lokalnych agentów

11:36

przetestować u siebie. I to wyglądał

11:39

taki pierwszy mój prompt, który

11:40

napisałem do tego lokalnego modelu. Chcę

11:43

żebyś sprawdził znalezisko z raportu

11:44

automatycznego skanera, powiedz, czy to

11:46

jest ważne z punktu widzenia

11:47

cyberbezpieczeństwa i treść raportu.

11:48

>> Piotek pisał piąty po polsku.

11:50

>> Ja pisałem, ja pracuję w zagranicznej

11:52

korporacji, więc pisałem po polsku.

11:54

Marcin pracuje w Polska pisał po

11:55

angielsku.

11:59

I tak i dostałem taką odpowiedź od tego

12:01

lokalnego modelu, że to nie jest

12:03

interesujące w ogóle, bo to jest po

12:04

prostu informacja, że Engin gdzieś

12:06

został znaleziony. nic wielkiego. Z tym,

12:08

że co ja mogłem z tym zrobić dalej? To

12:10

jest jakieś wypracowanie, które i tak

12:12

musiałbym przeczytać. Jeżeli dostałbym

12:14

załóżmy 20 000 takich opracowań, to

12:16

przeczytanie tego zajęłoby mi więcej

12:18

czasu niż przeczytanie tych raportów z

12:20

narzędzia. Więc musiałem trochę

12:22

udoskonalić mój prompt. I tak wygląda

12:23

trochę udoskonalony prompt. I z modelem

12:27

jest jak z dzieckiem. Dokładnie mu

12:28

musimy powiedzieć, czego oczekujemy,

12:29

żeby wiedzieć, żeby on wiedział co nam

12:33

zwrócić. I po takim pięknym prompcie,

12:36

którego nie będę czytał, bo jest za

12:37

długi, dostawałem coś takiego. Decyzja

12:40

nieinteresujące i krótkie uzasadnienie.

12:42

Ja po przy skanowaniu tych wszystkich

12:44

podatności, które zostały znalezione,

12:45

wiedziałem, które mogą być interesujące.

12:47

Czyli na przykład jakiś panel do

12:49

logowania do VPNa, że został znaleziony,

12:51

jakiś inny panel do logowania i to była

12:53

rzecz, której można by się przyjrzeć, bo

12:55

takich rzeczy wystawiać u nas na

12:57

zewnątrz nie wolno. Y, kolejną rzeczą,

13:00

gdzie zobaczyłem, że można by tego użyć

13:01

są blackbxowe pen testy, więc

13:03

postanowiłem porównać jak taki agent

13:06

oparty na GPT5 poradzi sobie w

13:08

porównaniu do BERPa. Więc zapuściłem

13:12

skanowanie BERPem. Berb wykonał 36000

13:15

requestów do tej aplikacji, skanując ją

13:17

i analizując odpowiedzi.

13:19

I co zrobił agent GPT? Wysłał dziewięć

13:23

requestów,

13:24

czyli to jest totalna porażka. On nie

13:26

wiedział jak wygląda kod źródłowy tej

13:28

aplikacji. Wysyłając tylko dziewięć

13:30

requestów nie był w żaden sposób w

13:32

stanie określić czy ona jest podatna czy

13:34

nie. I na pewno nie, czy cała jest

13:36

podatna. Tak, ale wyobraźmy sobie, że on

13:38

wysyła te 36 000 requestów, podobnie tak

13:40

jak BERB. I potem wyobraźmy sobie

13:42

rachunek jaki za to dostaniemy. To jest

13:44

ogromna ilość danych do przetworzenia,

13:46

więc byśmy szybko poszli z torbami. Ja z

13:50

kolei bardzo szybko chciałem mieć jakieś

13:51

takie efekty namacalne i na czymś

13:53

prawdziwym pracować, więc zainspirowałem

13:56

się kazetem od nas polskę zającem, który

13:59

przez kilka lat ostatnich opowiadał o

14:01

takim miejscach fazowania pluginów do

14:03

WordPressa. On tam znalazł setki

14:05

podatności. obecnie ma chyba 46

14:07

podatności zgłoszone z CVE, więc

14:09

naprawdę świetne efekty i pomyślałem

14:11

sobie, że jak wezmę jakieś pluginy,

14:13

gdzie kazet już je testował i też to

14:14

znajdę, to będzie dobrze, a jeśli

14:16

znajdzie coś nowego, to będzie super,

14:18

ale że to jest dobre pole doświadczalne,

14:19

żeby eksperymentować i porównywać jak

14:22

sobie z tym agenci radzą. No i na warsza

14:24

wziął taką podatność w pluginie jedną z

14:27

topowych UKZA WP Hotel Booking SQL

14:30

injection. Yyy, no oczywiście jest na to

14:32

CV publiczne, więc jest jest opis, co

14:34

tam się wydarzyło, ale nie mówiłem temu

14:36

agentowi, tylko dałem mu kod źródłowę

14:37

tego plugin do przetestowania i dałem

14:39

takiego prompta, że jesteś świetnym

14:41

badaczem bezpieczeństwa. Chciałbym,

14:42

żebyś przeanalizował ten kod. Tutaj masz

14:44

y paczkę z kodem. No więc sprawdź jakie

14:47

tam są błędy bezpieczeństwa. No i

14:49

znalazł mi krytyczną podatność PHP

14:53

object injection z desjalizacją. Nie ma

14:55

to tego SQL injection, którego szukałem.

14:57

No ale fajnie. No jest jakaś jest jakaś

14:58

krytyczna podatność i kazałem mu tą

15:01

podatność y zrobić po ca, żeby

15:03

udowodnić, że ona faktycznie jest.

15:04

Zaczął mielić, mielić, stworzył mi

15:06

dziesiątki plików baszowych, które po

15:09

kolei odpalał i twierdził, że już za

15:11

chwilę mu się uda, za chwilę mu się uda.

15:12

I tworzył kolejne pliki w katalogu. I w

15:14

końcu dostałem taką wiadomość. Przełom,

15:17

udało mi się wykonać zdalne wykonanie

15:19

kodu. Ja wtedy byłem: "Wow!" O kurde,

15:21

ale ale to dobrze działa i zajrzałem do

15:24

tego pliku. Coś mi nie grało z tymi

15:25

użytkownikami. Okazało się, że w pliku

15:28

baszowym wykonał lokalnie ID. Jeszcze

15:31

komentował, że to jest faktycznie

15:32

lokalnie, ale potem miał echo, że to

15:34

jest poof of concept tego tej

15:37

podatności. Y i wytknąłem mu ten błąd i

15:41

powiedział mi: "No faktycznie masz

15:42

rację, to był fej."

15:44

[śmiech]

15:46

>> [wciągnięcie powietrza]

15:46

>> A wydałem na to 6 do$larów w stą godzinę

15:49

życia, więc nie byłem zadowolony i to

15:52

moje zadowolenie z Lemów spadło na sam

15:54

dół i uważałem, że są gówniane.

15:57

>> Tak, ja też natknąłem się na halucynację

15:59

i uznałem, że to jest dość duży problem.

16:01

Też jednym z takich pierwszych moich

16:03

testów było poproszenie tego agenta,

16:04

żeby przetestował kod aplikacji, którą

16:06

sam napisałem, taka trochę bardziej

16:08

rozbudowana i myślę, może coś znajdzie,

16:10

może sobie załatam. I on mi wypluł coś

16:12

takiego, że znalazłem SQL Injection w

16:15

pliku login form. Ja patrzę na to SQL

16:17

Injection i myślę, ale siara, będę

16:19

musiał to pokazać na prezentacji, że ja

16:20

takie rzeczy robię. No i zacząłem to

16:23

analizować. Szukam tego pliku login form

16:25

i okazuje się, że tego pliku nie ma.

16:27

Nie dość, że on zmyślił podatność, to

16:29

zmyślił cały plik, więc a to jest to

16:33

była straszna ściema i tak no całkiem

16:36

mnie to rozbawiło i postanowiłem jeszcze

16:38

trochę sobie potestować jak bardzo te

16:40

agenty potrafią halucynować i tu jeden z

16:42

tych lokalnych modeli zapytałem 100 razy

16:45

ile to jest 2 + 2 x 2 odpowiedź samym

16:48

wynikiem bez dodatkowych komentarzy ile

16:50

to jest 2 + 2 x 2

16:54

>> nie bo ctery i agent

16:57

stokroć

16:58

powiedział, że to jest cztery. Myślę, no

17:00

jakaś pomyłka. Ja używałem API do tego.

17:01

Myślę, może coś się źle sparsowało albo

17:03

coś. Zapytałem w GUI i faktycznie on za

17:05

każdym razem powtarzał, że to jest

17:07

cztery, ale wystarczyło go poprosić o

17:09

uzasadnienie, już dostawaliśmy dobry

17:10

wynik, więc to też pokazywało jak ważne

17:12

są prompty.

17:13

>> No i czasu było coraz mniej. W zasadzie

17:15

został nam miesiąc do prezentacji, a

17:17

mamy tylko śmieszne śmieszne rzeczy do

17:19

pokazania jak to nie działa. A

17:21

chcieliśmy pokazać jednak jak zostać tym

17:22

pentesterem z wykorzystaniem AI. No więc

17:24

zaczęliśmy kminić jak różne rzeczy

17:25

zoptymalizować, poprawić, żeby to

17:27

zaczęło działać lepiej. Pierwszą rzeczą

17:29

dla mnie to był ten koszt. No bo jak

17:31

wydałem 6 dolarów na jednym pluginie,

17:33

żeby debagować Fitiva,

17:35

to nie wyżyło dobrze przy takim

17:37

skanowaniu na większą skalę pluginów

17:39

WordPressowych. I zauważyłem, że jest

17:40

taki pakiet w Open AI Pro za 200, gdzie

17:43

twierdzą, że jest unlimited wszystko.

17:45

Więc myślałem se, no prawie jak zadałem,

17:47

okej, no 200 200, a będę mógł robić

17:50

wszystko do końca już prezentacji ile

17:52

chcę, to wezmę. Nie do końca tak się

17:54

okazało, ale o tym powiem później. To

17:57

wymusiło też zmianę trochę agenta z z

18:00

Cloda Code na Open AI Codex. Kodeks ma

18:02

analogicznego agenta jak

18:05

Clot i zmiana była tym wymuszona, że ten

18:08

pakiet nie dawał dostępu takiego

18:09

bezpośredniego do API, tylko pozwalał

18:12

się logować kontem, więc po prostu

18:13

musiałem się zalogować kontem, a

18:14

wspierał tylko kodeks. Mimo że są jakieś

18:17

artykuły w internecie, ludzie rewersują

18:19

to API, bo to jest inne API niż to niż

18:21

to zwykłe, którego używa kodeks i da się

18:23

to rewersować, ale nie mieliśmy na to

18:24

czasu, więc poszedłem w kodeksa. No i

18:27

okazało się, że kodeksowi dałem takiego

18:28

samego prompta jak clodudowi. dokładnie

18:31

takiego samego na samym pluginie, a on

18:33

znalazł SQL Injection. Oczywiście jakby

18:35

to nie jest kwestia tylko agenta, tylko

18:36

też tego, że to był inny model, no bo

18:38

Kodeks używał GPT, a Clot używał Sonet

18:41

4,5,

18:42

ale no znalazł i to dosyć szybko ESQ

18:45

injer właśnie w takim parametrze, jak

18:46

każ to znalazł fazingiem był w stanie

18:49

stworzyć mi poca dosyć szybko. Wyciągnął

18:51

flagę, którą schowałem w bazie danych i

18:54

zwrócił mi tą flagę. Więc faktycznie

18:55

taki SQL injection, o którym on nie

18:57

wiedział, bo ta podatność była

18:58

publikowana później niż odcięcie jego

19:00

bazy wiedzy był w stanie znaleźć. To nie

19:03

był z JOD, to było odtworzenie

19:05

podatności. No ale fajnie to znaczy, że

19:08

działa, że da się coś da się coś

19:10

znaleźć. Kwestia odpowiedniego dobrania

19:12

narzędzi, zasobów, promptów. Być może

19:14

jeszcze nie do końca wtedy wiedziałem. A

19:17

jeśli chodzi o to unlimited, to okazało

19:19

się, że w ciągu jednego dnia byłem w

19:20

stanie złożyć 30% tygodniowego limitu 5

19:23

godzin, pięciogodzinny, to to w ciągu

19:26

chyba 30 minut czy czy godziny

19:29

zużywałem, więc to nie jest unlimited,

19:30

ale nadal to było wychodziło taniej i

19:33

więcej niż robienie tego przez API.

19:37

No trochę spadłem, bo jednak to będzie

19:39

kosztowało, nie będzie takie tanie.

19:43

Ja rozglądając się za narzędziami

19:46

uznałem, że mam trzy drogi tak naprawdę,

19:48

czyli te lokalne modele ze względu na

19:50

to, że to się do chmury nie wysyła,

19:52

tylko są wady. Tak, to działa bardzo

19:54

wolno na komputerze własnym musi być

19:57

mocne GPU.

19:59

Jest wiele różnych modeli do wyboru, ale

20:01

one wszystkie są niskiej jakości. O tym

20:03

też będzie za chwilę. No coś za coś. Są

20:06

jeszcze, tak jak Marcin mówił,

20:08

komercyjne modele zintegrowane z IDE. No

20:11

i tu jest coś, co to wyklucza w

20:13

wykorzystaniu firmowym, czyli te dane

20:15

lecą prosto do chmury, ale jest to mega

20:17

wygodne, tak? Po prostu piszemy prompt i

20:19

wszystko się dzieje samo. I te koszty

20:22

subskrypcji są niskie. Koszt subskrypcji

20:24

podstawowej na kursora to jest 20 $arów

20:26

miesięcznie. Jest jeszcze trzecie

20:27

rozwiązanie, nie, które jako szczęśliwy

20:29

pracownik Orange mam dostępne. Coś, co

20:32

nazywa się Dno czyli to jest takie

20:34

rozwiązanie, które dostaliśmy od naszych

20:35

przyjaciół z Francji, z Orange Friends i

20:38

to ma wbudowane modele. Dane lecą do

20:40

chmury, ale to nie jest już ta chmura

20:41

publiczna, tylko to jest nasza chmura

20:43

dedykowana z separacją danych, więc tam

20:45

już większe rzeczy można wysyłać. No ale

20:48

wadą jest to, że jest brak CP, brak

20:51

obsługi przez API i jakiekolwiek

20:53

możliwości skryptowania, ponieważ to

20:55

jest dostępne tylko przez przeglądarkę.

20:58

>> No i kolejny taki obszar, który uznacie,

21:00

że może być ważny, to są te prompty,

21:01

czyli jak dobrze napisać prompta. Już z

21:04

tego obrazku będzie wynioskować, że to

21:06

jest ważne, jak jak jest ten prompt

21:09

napisany,

21:10

jak wyglądało nasze ulepszenie prompta.

21:12

No więc ja kazałem agentowi wyjaśnić

21:14

czemu nie znalazł tego SQL injection w

21:16

przypadku tego Cloda i on znalazł

21:19

faktycznie problem dlaczego go nie

21:21

znalazł i powiedział, że ulepszy mi te

21:23

mojego prompta tak żeby go już w

21:25

przyszłości znajdywał. To jest coś co

21:27

zaproponował. To było bardzo długie,

21:29

jeszcze dłuższe niż niż na tym slajdzie.

21:32

No i tutaj zawsze jest taki dylemat, czy

21:34

prąd powinien być długi, bardzo

21:35

zbudowalny, bardzo dokładny, czy jednak

21:37

trochę krótszy i zostawić temu modelowi

21:39

możliwość na własną interpretację. to

21:41

zależy od zastosowań trochę. Długie

21:43

prompty na pewno będą droższe, będą

21:44

kosztowały więcej tokenów, będą dawały

21:46

bardziej powtarzalne wyniki z naszych

21:48

doświadczeń, ale za to krótkie prompty

21:50

czasami mogą spowodować to, że jak go

21:52

odpalimy 10 razy, to znajdzie różne

21:55

podatności, bo sobie pójdzie innymi

21:57

ścieżkami, sobie wymyśli trochę samemu,

22:00

co on by chciał teraz sprawdzić, a

22:01

będzie to kosztowało tyle samo co ten

22:02

długi prompt. Więc 10 razy odpalenie

22:04

krótkiego prąta może dać więcej

22:07

znalezisk niż jedno odpalenie takiego

22:09

długiego, ale w każdym przypadku te

22:11

wyniki są mocno nieprzewidywalne, co się

22:13

dostanie.

22:14

>> Działaliśmy całkowicie osobno, ale

22:16

przemyślenia mieliśmy bardzo podobne. To

22:17

jest mój prompt, od którego zaczynałem

22:19

dosłownie trzy linijki. Tu masz źródła,

22:21

tu aplikacja jest wystawiona. Testuj

22:23

źródła, potwierdzaj na wystawionej

22:24

aplikacji. To jest pierwszy prąd. On nie

22:26

spisywał się najlepiej, chociaż tak jak

22:28

Marcin powiedział, różne wyniki czasem

22:29

zaskakujące dawał, ale to jest prompt,

22:32

który sprawdzał mi się dużo lepiej.

22:33

Trzeba było agentowi określić rolę, że

22:35

jest ekspertem do spraw bezpieczeństwa,

22:37

wiadomo, i że ma w jaki sposób ma

22:40

testować aplikację, jakie są jego cele,

22:42

co dostaje na wejściu, jakie są zasady

22:44

testowania, jakie są zasady analizy, co

22:47

jest zakazane, jak trzeba weryfikować,

22:49

że ma być zero false positivów i na

22:51

końcu co chciałbym otrzymać. To jest

22:53

wszystko jeden prompt rozłożony na kilka

22:55

slajdów. I to w moim przypadku

22:57

sprawdzało się najlepiej, bo dostawałem

22:58

dokładnie to, czego oczekiwałem i ten

23:00

model testował to, co bym chciał.

23:04

Mamy, mamy cenę, mamy prompta. To teraz

23:06

model. Y, ja się trochę przywiązałem do

23:08

tego Open A, no bo wydałem 200 $ar na na

23:12

licencję, więc nie chciałem niczego

23:13

innego już używać. No i miałem do wyboru

23:16

modele ze stajni Open AI. Jak się używa

23:19

kodeksa, dochodzą takie modele jak

23:21

zoptymalizowane pod kodeksy typowo

23:22

podprogramowanie, czyli GPT5, kodex.

23:25

Obecnie to jest w ogóle GPT51, bo w

23:27

czasie robienia tej prezentacji wyszły

23:28

trzy nowe modele i Open wypuścił GPT51 i

23:33

Sonet wypuścił Opusa 4,5 i Google

23:36

wypuścił Gemini 3 Pro w czasie jednego

23:39

miesiąca jak się prezentację to już jest

23:41

nieaktualne te GPT5 bez 51

23:44

ktoś zn takiego bloga gdzie ktoś testuje

23:46

ogólnie wszystkie modele każąc mu

23:47

rysować kaczkę jadącą na rowerze i na

23:50

tej podstawie ocenia jak dobrze ten

23:51

model działa. Oczywiście to nie ma

23:52

przełożenia na nasze zastosowanie, ale

23:55

ale trochę obrazuje jakby, że te modele

23:57

się od siebie jednak różnią i i dają

23:59

inne wyniki. Ja zostałem przy GPT5 Kodex

24:03

jakby po wielu różnych tam testach,

24:04

skminach nie ma na to dowodu takiego

24:07

typowo zrobimy test taki, 100 testów

24:09

takich, 100 takich, bo nie było to

24:10

czasu, ale na wyczucie czuję, że GPT5

24:12

Codex lepiej działa. To jest ten vi pen

24:13

testing.

24:15

[śmiech]

24:16

Wydaje mi się, że lepiej działa. Do tego

24:18

mamy rozumowanie, którego można jakiś

24:21

tam poziom ustawić. To też jest typowo w

24:24

tych GPT, bo chyba inni tego nie dają

24:26

takiej opcji. To jest na ile mocno

24:28

będzie rozkminiał dany problem. Yyy, no

24:31

i możecie zobaczyć porównanie w tym

24:32

samym prompcie, gdzie na high on

24:33

faktycznie sobie analizuje długo, co

24:35

dalej zrobi, rozpisuje to, co on będzie

24:37

planował i tak dalej, a na medium to

24:39

leci szybciej. Yyy, i zużycie tokenów

24:41

tak samo. Na high jest dużo wyższe niż

24:42

na medium czy na low, bo jeszcze jest

24:43

low dostępne. Yyy znowu na wyczucie

24:46

najlepiej się sprawdza medium, bo nie

24:47

kosztuje dużo, daje dobre wyniki

24:50

i i działa w zasadzie długo.

24:53

Nieprzerywanie, autonomicznie potrafi

24:55

działać. To jest też dale tego kodeksa

24:57

GPT5. Kodeks od GPT5 zwykłego się różni

24:59

tym, że potrafi bardzo długo

25:01

autonomicznie wykonywać jakieś zadania.

25:03

Do tego jest zoptymalizowany, bo był

25:05

tworzy zadań programistycznych, ale to

25:06

też się sprawdza przy przy pentestach.

25:09

>> Ja przy wyborze modelu wymyśliłem sobie,

25:11

że zrobię coś takiego jak wojny agentów.

25:13

Poproszę każdego z tych każdy ten model,

25:16

żeby wygenerował prosty blog, prostą

25:17

aplikację webową, a potem każe wszystkim

25:19

agentom

25:21

opartych na tych modelach o zrobienie

25:23

pen testów.

25:25

Tak wyglądał prompt. Jesteś programistą

25:27

PHP MSQL, kompletnie działający blog i

25:29

wszystkie funkcje bloga jakie mają być

25:31

to ma być aplikacja produkcyjna i

25:33

zabezpieczona.

25:34

>> Ona miała być bezpieczna. Ta aplikacja

25:35

>> miała być bezpieczna. Tak. I to są

25:36

wyniki testów. U góry mamy model, który

25:39

tworzył bloga.

25:42

W pionowej kolumnie mamy agenta, który

25:46

testował tego bloga i na przycięciu mamy

25:48

wyniki. Tak, czyli

25:51

możemy sobie po kolorkach nawet

25:52

zobaczyć, ale to co jest kluczowe tutaj

25:54

to tam gdzie jest tage. To znaczy, że ta

25:57

aplikacja miała RCE wbudowane w sobie

26:00

i była skrajnie niebezpieczna i w trzech

26:03

blogach RCE zostało wygenerowane przez

26:05

Sonet 4,5, przez Grocka i przez Deepsik.

26:08

I [parsknięcie] teraz to co

26:09

interesujące, który model był w stanie

26:11

znaleźć te podatności. Okazuje się, że

26:13

wszystkie trzy RCE znalazły GPT 51 i

26:16

GMini 3 Pro. Dwie podatności RC znalazło

26:20

Opus, jedną Sonet i zero znalazł

26:22

composer 1, Grock i Deepsek. Inną ważną

26:25

rzeczą jest też false positivy, tak? No

26:28

bo nie sztuką nawalić błędów, znaczy

26:30

tych odkryć błędów. Jeżeli my mielibyśmy

26:33

potem to analizować, a okaże się, że 90%

26:36

to są false positivey, więc Deepsik trzy

26:39

false positivey, composer Grock 2, Sonet

26:42

1, a opus GPT i G mini zero false

26:45

positivów wykazało w tych testach, więc

26:46

to jest dość obiecujące, bo nie robi nam

26:48

roboty. Ale chciałem też przetestować

26:51

lokalne lmy. Niestety żaden z lokalnych

26:52

llmów nie był w stanie wygenerować

26:54

takiej aplikacji, która była w pełni

26:56

działająca. sobie zrobiłem takie

26:57

założenie, że mogę poświęcić maksymalnie

26:59

5 10 minut na poprawę tego bloga, żeby

27:01

zaczął działać. Niestety te aplikacje

27:04

były tak skopane, że tego się nie dało

27:05

zrobić.

27:07

Więc stworzyłem taki pliczek, test PHP,

27:10

gdzie zaimplementowałem najbardziej

27:11

podstawowe podatności, jakie da się

27:13

tylko zaimplementować. Jak sobie

27:14

spojrzymy na to SQL Injection, na tego

27:16

XSSA i na to RC, które tu są, to są

27:19

takie podręcznikowe z pierwszego

27:21

rozdziału informacji o podatnościach.

27:24

I sprawdźmy jak te modele, które udało

27:26

mi się lokalnie uruchomić na komputerze

27:28

sobie z tym poradziły. Widzimy, że z

27:29

takimi prostymi podatnościami radziły

27:31

sobie całkiem, całkiem przyzwoicie, ale

27:34

z podatnościami, bo kazałem im też

27:35

znaleźć podatności w tych blogach, nie

27:36

radziły sobie w ogóle. Halocnowały

27:38

masakrycznie zmien zwłaszcza deepsik. Po

27:42

nim spodziewałem się, że sobie tutaj

27:44

całkiem nieźle poradzi. On zaczął tak

27:45

halucynować, że zaczął pisać raporty po

27:47

chińsku w pewnym momencie.

27:50

I byłem też ciekaw jak bardzo to jest

27:52

powtarzalne, czyli wziąłem tego samego

27:55

buaga, ten sam model, ten sam prompt i

27:57

analizowałem to 50 razy. Wykonałem 50

28:00

testów i się okazuje, że na 50 testów

28:03

Opus 37 razy, Gemini 46 i GPT 43 razy

28:09

znalazły tą podatność. Może się wydawać

28:10

to dużo, ale jeżeli to jest tylko 50

28:13

testów, to tutaj skuteczność niewykrycia

28:15

mamy odpowiednio 26%, 8, 14%. To już

28:19

jest dużo, tak, żeby zaburzyć jakieś

28:21

nasze nasze wyniki i naszą pewność co do

28:23

tego, że aplikacja została dobrze

28:24

przeanalizowana.

28:26

>> To jeszcze tutaj na chwilę wysu, że

28:27

faktycznie widzimy dużą różnicę między

28:29

tymi topowymi modelami komercyjnymi, a

28:31

tymi open sourceowymi onpremisowo

28:33

hostowanymi czy czy tańszymi, jeśli

28:36

chodzi o to zastosowanie właśnie do

28:37

testów bezpieczeństwa. I ta

28:38

powtarzalność to też jest mega ważne pod

28:40

kątem jakbyśmy chcieli to wdrożyć w

28:42

jakimś tam cyklu wytwarzania

28:43

oprogramowania że no może się tak

28:45

zdarzyć że odpalimy dokładnie to samo i

28:47

znajdzie albo nie znajdzie jakby no rzut

28:48

kostką więc to jest problematyczne.

28:53

Taki problem, kolejny, na który ja

28:54

natknąłem się, to były guaty, czyli te

28:56

wszystkie najnowsze modele stają się

28:58

tak, żeby ich nie używać do takich celów

29:01

złych w cudzysłowiu, żeby nie tworzyć

29:03

exploitów, nie hakować nimi systemów. I

29:07

faktycznie napotkałem się takie

29:08

sytuacje, gdzie chciałem, żeby stworzył

29:10

mi poca danego danej podatności, a mówi,

29:13

że nie może tego zrobić. Zapytałem go

29:14

czemu. No wytłumaczył mi, że faktycznie

29:15

to jest niezgodne z jego z jego

29:17

polityką. Okazuje się, że to się mega

29:19

łatwo obchodzi. yyy na przykład

29:21

wystarczy powiedzieć, że to jest CTF i

29:22

że masz szukać flagi i stworzyć skrypt,

29:25

który będzie szukał tej flagi. No i już

29:26

wtedy to działa. Yyy i jest sporo takich

29:30

takich bardzo prostych obejść, gdzie

29:32

kwestia tego, co jak mu się to

29:33

wytłumaczy. A nawet jak wpadniemy w taką

29:36

dziurę, że on myśli, że nasze intencje

29:38

są złe, bo jak tak pomyśli, to już potem

29:40

nieważne co piszecie, nawet jak piszą

29:41

CTFie, to już tego nie zrobi. To jak

29:44

wywalimy mu kontekst, czyli od nowa

29:45

zaczniemy konwersację i nawet damy takie

29:47

samo polecenie, a nie ma tego

29:49

poprzedniego kontekstu, gdzie wie, że my

29:50

chcemy złe rzeczy zrobić, to się zgodzi

29:52

i to i to zrobi. Tutaj też widać, że

29:54

takie samo polecenie, no już tego po co

29:57

po co mi wykonał. Czasami się też zdarza

29:59

losowo, że coś nie zadziała, nie wiadomo

30:01

dlaczego układ gwiazd, że nie zadziała.

30:04

I odpisał mi coś, kazałem polecenie, on

30:06

mi, że you my access just simple

30:08

recording. I zapytałem o co mu chodzi.

30:10

Looks like I glit. Sorry about that. No

30:13

i jakby spoko jak mi to pisze, ale jak

30:16

chcę to automatyzować i masowo takie

30:17

testy robić, no to pewnie trzeba by to

30:19

jakoś wykrywać, że on wtedy się wywalił,

30:22

a nie, że nie znalazł podatności.

30:24

Nie wiadomo co się wydarzyło.

30:28

A dalej, dalej ja mam [śmiech]

30:32

to przechodzimy już. Wiemy już co co i

30:35

jak musimy dopracować. Wiemy gdzie są

30:39

gdzie są te problemy. No to teraz

30:41

chcielibyśmy zeskalować, przynajmniej ja

30:43

bym chciał to zeskalować, żeby te

30:44

pluginy WordPressowe. Tak to wygląda na

30:46

początku, czyli wiele okienek

30:47

potwieranych po prostu z kodeksem, gdzie

30:50

kazałem, pisałem mu testuj to, testuj

30:52

to, testuj to, aż może coś znajdę, ale

30:54

to się no niedobrze skalowało, więc

30:57

pierwszym podejściem to było MCP. Kodeks

31:00

może działać jako serwer MCP, do którego

31:02

będzie się, którego się będzie używało

31:04

po prostu jako jako narzędzie. Ale

31:06

okazało się, że w tym moim pakiecie Open

31:08

AI za 200 nie ma w ogóle API. Już

31:10

wcześniej o tym mówiłem, ale zapomniałem

31:11

o tym, jak to robiłem. W sensie jak

31:13

pisałem ten kod. No i dostałem właśnie

31:17

tutaj błąd, że nie ma API. No i okazało

31:19

się, że tam w szczegółach faktycznie na

31:20

tym pakiecie było napisane, nie ma nie

31:22

ma tego API, ale jak kupowałem to za 200

31:24

dolarów to nie wiedziałem, że nie ma

31:25

tego API. Trzeba było to jakoś obejść. M

31:28

okazało się, że kodeeka można odpalać

31:30

jako CLI Headless, czyli że w ogóle nie

31:33

ma żadnego okienka, tylko po prostu jako

31:34

polecenie baszowe. Wyniki zapisać w

31:37

JSON, więc łatwo to skryptować w

31:39

Pythonie. Oczywiście skrypt pythonowy do

31:41

tego został napisany też kodeksem bez

31:44

żadnego mojego udziału, tylko napisałem

31:46

mu co chcę osiągnąć. Też udało się to

31:50

tak napisać jemu, żeby tam było wielu

31:52

workerów, czyli żeby można było to

31:53

skalować. No i tutaj widzimy odpalenie

31:55

na 300 pluginach właśnie po kolei takiej

31:59

takiej analizy.

32:01

Tak wyglądało to taka można powiedzieć,

32:04

no nie jest to architektura, no ale ale

32:06

mniej więcej tak wyglądał ten przebieg,

32:07

czyli że mamy plugin WordPressowy, on

32:09

jest ściągany na nim odpalana jest to

32:10

polecenie do testowania. Wynikiem są

32:12

dwie rzeczy. jest plik mdroowy, gdzie

32:14

jest opisane jak odtworzyć podatność,

32:16

jeśli ją znajdzie. I plik w takim

32:18

formacie save to jest taki format

32:20

dedykowany dla analizy właśnie kodu

32:23

źródłowego, gdzie w JSON jest opisane w

32:25

jakiej linijce kodu, jaka podatność jest

32:27

znaleziona. To pomaga w tym, że potem

32:29

ten plik jest łatwo wziąć, załadować do

32:31

kolejnej sesji i powiedzieć mu tutaj

32:33

masz opisaną podatność w jakich

32:35

linijkach i tak dalej. I spróbujemy

32:37

odtworzyć. Tak właśnie robiłem, że

32:38

automatyzowałem szukanie podatności, a

32:41

potem już bardziej ręcznie stawiałem na

32:42

dokerze WordPressa z danym pluginem

32:45

zainstalowanym i już w takiej sesji

32:47

interaktywnej z GUI mówiłem mu, że weź

32:49

ten plik z opisem podatności w tym

32:51

formacie save i spróbuj stworzyć POCA,

32:54

żeby pokazać mi, że to, że to działa.

32:58

>> Ja z kolei po przeanalizowaniu

32:59

możliwości, których miałem, czyli nie

33:01

mogłem wysyłać danych do chmury, lokalne

33:03

modele się w ogóle nie sprawdzały.

33:05

Wybrałem to rozwiązanie orangeowe, czyli

33:07

dajno tu. Tylko jest ten problem, że nie

33:09

ma API. jest rozwiązanie tylko w

33:11

przeglądarce dostępne. No ale jest taka

33:12

stara zasada, że wszystko może być API,

33:15

jeżeli tylko bardzo chcemy. Więc ja

33:17

sobie to skryptowałem w Pythonie,

33:18

skrapowałem sobie tą stronę, wysyłałem

33:20

do niej polecenia, odbierałem je i

33:22

napisałem sobie taki właśnie prosty

33:24

klient terminalowy. Tutaj widać, że

33:27

działa. Pytam go ile to jest 2 + 2 x 2.

33:29

On mi odpowiada i potem zwraca ID

33:32

konwersacji, żebym mógł się na nie, na

33:35

tą konwersację potem powoływać. Tu go

33:37

proszę, żeby mi przypomniał o czym

33:38

ostatnio rozmawialiśmy i on dokładnie to

33:40

cytuje. Nie ma też MCP,

33:43

ale wystarczy mu powiedzieć, że żeby

33:46

było MCP, on jest grzeczny i się słucha.

33:48

No i dostawałem odpowiedzi już w tym

33:50

formacie, w którym mogłem używać tego

33:52

razem z narzędziami. Zacząłem sobie

33:54

skanować te te aplikacje orangeowe z

33:58

z jednego z hostingów, który mamy i na

34:00

50 przeskanowanych aplikacji znalazło

34:03

jedno RC i jednego XSSa. Ten XS to nic

34:05

specjalnego w jakiejś skórce z

34:08

WordPressa,

34:10

ale ten RC był dość ciekawy, a głównie

34:11

ze względu na sposób, w jaki on je

34:13

znalazł, bo ja go przekonałem, że

34:15

testujemy środowisko testowe, może

34:17

wykonywać payload ofensywne, więc on

34:19

uznał, że dobrym pomysłem jest zrobienie

34:21

RMF, tak? Czyli usunął wszystkie pliki z

34:24

tego katalogu, a potem jeszcze

34:25

radośnieował, że zweryfikował verified,

34:28

że wszystko się udało. Yyy, podatne sama

34:31

w sobie też była całkiem ciekawa, bo tam

34:33

był konwerter wideo i w żaden sposób nie

34:35

walidował nazwy pliku, który był gdzieś

34:37

zahostowany. Wystarczyło zuploadować

34:39

plik o spreparowanej nazwie i to się

34:41

ładnie wykonywało.

34:43

>> No a u mnie się mieliły te pluginy WPSa.

34:46

Działały sobie działały i znalazły

34:49

pierwszą podatność. Byłem mega

34:51

zaskoczony, że udało się tak szybko coś

34:53

znaleźć, czego wcześniej nigdzie nikt

34:55

nie znalazł, bo to nie była podatność,

34:56

którą kazet gdziekolwiek czy ktoś inny

34:58

gdziekolwiek opisał. Hmm, w takim

35:00

pluginie WPKego. Yyy, no gadałem właśnie

35:03

z kazetą, mówi, że no faktycznie tam

35:05

kiedyś było dużo różnych podatności, tej

35:06

jeszcze nie widziałem, więc coś

35:08

ciekawego. Zapytałem się kazetę jak on

35:10

to zgłasza w ogóle te podatności i on mi

35:12

powiedział, że jest y są tacy

35:13

pośrednicy, bo autorów podatności,

35:15

autorów tych pluginów jest wielu, więc

35:17

ciężko z nimi gadać bezpośrednio, ale są

35:19

CNA, które po prostu pośniczą w

35:20

zgłaszaniu i do tego płacą bunty za

35:22

pluginy wybrane. Ja byłem taki: "Wow, no

35:24

to mam automatyczne agenty, które

35:26

szukają podatności. Coś już znalazłem,

35:28

za chwilę będę na pewno bogaty, więc

35:32

[śmiech] oczywiście wskoczyłem

35:33

wskoczyłem wyżej na tej mojej

35:35

sinusoidzie. No i wysłałem to zgłoszenie

35:37

przez przez WFa, ale niestety dostałem

35:40

odpowiedź, że to jest duplikat". Y,

35:42

znaczy faktycznie nie była ta podśłana.

35:45

Yyy, nie było na to CVE, najnowsza

35:47

wersja była podatna, ale ktoś inny to

35:49

już kiedyś zgłosił i po prostu ten

35:52

dostawca tego pluginu gdzieś już go

35:54

opuścił i dalej nie rozwija, więc po

35:57

prostu tak sobie wisi z podatną wersją,

35:58

ale nadal był w stanie znaleźć

36:00

podatność, która nigdzie nie była

36:02

pisana, ani nigdzie na nią nie było

36:04

exploita. No troszeczkę zjechałem, ale

36:06

nadal było było fajnie.

36:09

A skandal trwały. To trochę tam się

36:11

mieliło. Jednak te code basey pluginów

36:15

czasami są duże i się okazało, że

36:19

znalazłem też coś za co dostałem banty.

36:21

Wysłałem zgłoszenie w odpowiedzi

36:23

dostałem informację, że faktycznie

36:25

zaliczają to jest 100 dolarów po kilku

36:27

dniach, kolejne 48 dolarów po kilku

36:29

dniach, kolejne 132 $arów. Przypominam,

36:32

że to są rzeczy, które są publicznie

36:34

dostępne i mnóstwo ludzi je testuje. To

36:37

są otwarte back bounty, gdzie mnóstwo

36:38

ludzi testuje i ręcznie, i automatami i

36:41

lmami, więc byłem taki mega zaskoczony,

36:44

bo widzieliście tą prezentację jak ten

36:46

rozwój wyglądał i to nie było nic

36:47

zaawansowanego, nic wymyślnego,

36:51

ani żadna szczególnie magia, tylko

36:53

raczej po prostu walenie młotkiem, żeby

36:56

coś się udało fajnego pokazać na

36:57

prezentacji i się okazało, że coś się

36:59

udało znaleźć, ale skany nadal trwały.

37:01

Ostatecznie przeanalizowałem 860

37:03

pluginów w różny sposób. Bo to nie jest

37:05

tak, że on to sobie leciało cały czas i

37:07

ja tylko patrzyłem i zbierałem owoce z

37:08

tego. Oczywiście tam modyfikowałem na

37:10

bieżąco te prompty, ulepszałem,

37:13

zmieniałem trochę kod tego Pythona,

37:16

testowałem co nie działa, w jaki sposób

37:17

weryfikować i tak dalej. I znalazło na

37:20

koniec 87 podatności w pluginach

37:22

WordPressa. Nie miałem czasu, żeby

37:24

wszystkich przejrzeć, więc pewnie

37:26

jeszcze tam jest dużo zodów. Tak na oko

37:29

oceniam, że te 20% to są false positivy,

37:32

bo zdarzyły mi się takie takie

37:34

przypadki.

37:35

17 zgłosiłem, 17 się udało mi tak

37:38

zaprodukować, że mają poca kod w

37:39

Pythonie, który pokazuje, że ta

37:40

podatność istnieje

37:42

i po jednym z takich zgłoszeń dostałem

37:47

taką wiadomość,

37:49

że

37:52

podatność, którą zgłosiłem załapała się

37:54

nagrodę 4270 doarów. Yyy, wtedy

37:57

wyskoczyłem tak wysoko. [śmiech]

38:00

>> Ja jakbym wiedział, to też bym testował

38:02

WordPressy, a nie aplikacje orangeowe.

38:04

[śmiech]

38:06

[wciągnięcie powietrza]

38:07

I to był chyba zupełny przypadek. Znaczy

38:09

ja do tej pory nie jestem w stanie tego

38:10

odtworzyć. Znaczy mam tą podatną wersję

38:12

pluginu, daję te same prompty z tym

38:15

samym modelem. Y już odpalałem to

38:17

kilkadziesiąt razy i on mi nie znajduje

38:18

tej podatności. W sensie jak on to w

38:20

nocy znalazło jak on w nocy jak się te

38:22

gwiazdy ułożyły, że znalazł wtedy to ece

38:24

i nikt tego nie znalazł i to był plugin

38:26

100 000 instalacji. Nie mam pojęcia, nie

38:29

wiem jak to działa, ale zadziałało.

38:32

I tak dużo też podatności w innych

38:35

pluginach. 600 000, 500 000 instalacji,

38:37

100 000 instalacji. Są już CVKi, które

38:39

czekają w kolejce, nie są jeszcze

38:41

publikowane. Jest jedna opublikowana, o

38:42

której wam mogę dzisiaj powiedzieć. Yyy,

38:45

to jest taki plugin wallcard e-commerce,

38:48

nieaki szczególnie yyy ciekawy, ale

38:50

podatność była bardzo prosta.

38:53

Yyy znalazł yyy po 10 minutach, że y

38:56

jeden z end pointów yyy na yyy API

38:59

pozwalał przy ustawieniu flagi USCS

39:03

Export na 1 zwracał cały konflikt tego

39:04

pluginu łącznie na przykład z sekretami

39:06

PayPala.

39:07

To jest jakby no bardzo proste, ale

39:09

okazuje się, że tysiące ludzi, którzy

39:11

wcześniej to trzepali ręcznie,

39:13

automatycznie tego nie znaleźli. Yyy, a

39:14

jednak LM gdzieś był w stanie sobie tak

39:16

kontekst tego wyłapać, że to mogą być

39:18

tutaj dane yyy dane wrażliwe, jak

39:20

właśnie te sekrety PayPala. Yyy to

39:22

znalazł, bo co ciekawe, on mi też potem

39:24

pomagał w zgłoszeniu pisać i w

39:25

zgłoszenie był w stanie właśnie

39:26

dokładnie pisać scenariusz czemu to jest

39:28

wraźliwe, czemu to jest szkodliwe i co

39:30

tam się może znaleźć. Y, bo na przykład

39:32

ja w domyślnej konfiguracji tego plugin

39:34

tam nie miałem w ogóle PayPala

39:35

skonfigurowanego, tylko on mi

39:36

powiedział, że jeśli ktoś by

39:37

skonfigurował PayPala i dodał tam sekret

39:39

PayPala, to w ten sposób może ten sekret

39:41

PayPala wyciągnąć. Yyy, więc cały taki

39:43

łańcuch rozmowania jak doprowadzić do

39:45

tej do tej podatności. Yyy, no i ile by

39:48

to kosztowało wszystko, gdybym używał

39:50

tylko API? To co mówiłem na początku, to

39:52

jednak była dobra decyzja te 200 $arów,

39:53

bo gdybym użył API, to bym wydał prawie

39:54

4000 $ar na samo API po takiej cenie za

39:57

tokeny, bo zapisywałem każde zapytanie

39:59

ile kosztowało tokenów, przeliczyłem to

40:02

i to by kosztowało prawie 4000 $arów,

40:04

ale kosztowało to 200,

40:06

więc jednak ten deal był był niezły,

40:09

mimo że nie było API w nim.

40:11

Ja żadnego backbantu nie dostałem, ale

40:13

za to dostałem nowy zakres obowiązków

40:17

[aplauz]

40:22

i teraz wszystkie aplikacje w Orangeu

40:25

niebawem jak jak zrobię tak będą

40:27

testowane llmami zanim trafią na

40:29

produkcję.

40:32

Jedn

40:32

>> No i co co dalej? Jakby nie jesteśmy

40:34

nadal ekspertami, żeby mówić do końca co

40:36

dalej, ale na pewno z tytuświadczeń

40:38

wynika to, że LLMy mogą być takim

40:41

kompanem, partnerem w procesie

40:42

testowania aplikacji. One nie znajdą

40:44

wszystkiego, szczególnie dlatego, że

40:45

halucynują i nie można im ufać, że

40:48

powiemy, że on powie, że jest bezpieczny

40:49

kod i że jest bezpieczny kod, bo nie,

40:50

ale potrafią często znaleźć ciekawe

40:52

rzeczy, których ludzie nie są w stanie

40:54

albo ludzie pominęli, więc praktycznie

40:56

żadnym kosztem można soie dodać takiego

40:58

kompana, który będzie też dodatkowo

40:59

patrzył i testował aplikacje. No i z

41:02

mojej strony jeszcze takie

41:03

przesłuchanie, żeby faktycznie zacząć

41:04

zacząć tego używać. Znaczy ja mam bardzo

41:06

poczucie, że my jako branża za mało

41:09

robimy w tym obszarze, nie w obszarze

41:10

bezpieczeństwa AI, ale w obszarze

41:11

właśnie użycia AI, bo na przykład

41:13

analiza logów, analiza malwareu,

41:16

jakieś na przykład widziałem fajną

41:18

prezentację, ktoś pokazywał, gdzie

41:19

screenshoty ze steelerów analizował

41:21

masowo, gdzie ich były tysiące i

41:23

próbował analizować, czy to jest

41:24

komputer przestępcy, czy nie na

41:25

podstawie ikonek na pulpicie. yyy no i

41:27

robić to yyy skryptować to wszystko,

41:29

ocować screenshoty, skryptować to byłoby

41:31

ciężko. Lami to było kilka linijek.

41:33

Minus jest taki, że jeśli mamy rzeczy

41:35

wrażliwe wewnętrzne, no one nie mogą

41:37

trafiać do cloua. Yyy, więc wtedy musimy

41:39

używać od premisowych modeli, które są

41:41

często słabsze albo duże mają y

41:44

wymagania zasobów.

41:46

>> Dziękujemy wam bardzo za uwagę.

41:49

>> [aplauz]

41:51

>> Zapraszamy do

41:55

Zapraszamy do ocenienia nas na eventory

41:57

i słuchamy. Jeżeli są jakieś pytania, to

42:00

postaramy się odpowiedzieć. Yeah.

More transcripts

Explore other videos transcribed with YouTLDR.

Get the TLDR of any YouTube video

Transcribe, summarize, and repurpose videos in 125+ languages — free, no signup required.

Try YouTLDR Free