Nedávno jsem testoval webovou aplikaci nástrojem Burp Suite a po nějaké době vždy spadnul. Nikde ani stopy po chybě. Začal jsem hledat zda je to vůbec chyba nástroje.
Na stránkách podpory „Burpa“ jsem našel podobný problém, který podezírá OpenJDK, což je zjednodušeně řečeno běhového prostředí pro Javu. Tyto chyby jsou nepříjemné, je to pád virtuálního stroje pro Javu (JVM).
Rozhodl jsem se, že „Javu vyměním“. Následoval jsem postup v komunitním fóru Kali jak vyměnit OpenJDK za Oracle Javu a problém se vyřešil. Celý postup instalace nového prostředí Javy jsem doplnil o své postřehy, které si projdeme.
32 nebo 64bit?
Dnešní procesory podporují instrukční sadu Intelu x86-64, která umožňuje spouštět 32bit a 64bit aplikace. Pro nás je rozhodující, zda používáme 32 nebo 64 bitovou verzi operačního systému. Příkaz uname s parametrem -r nám prozradí verzi linuxového jádra, která tuto informaci obsahuje.
1 2 |
uname -r 4.3.0-kali1-amd64 |
Z výpisu vidíme, že používáme 64 bitový operační systém „kali1-amd64“. V 32bitové verzi uvidíme „i386“.
Stahujeme Java Development Kit (JDK)
Nyní přišel čas stáhnout Java Development Kit (JDK) od společnosti Oracle. JDK kombinuje běhové prostředí pro samotnou Javu (JRE) a další vývojářské doplňky jako je kompilátor a debuger.
Naproti tomu Java Runtime Environment (JRE) obsahuje pouze běhové prostředí, které umožňuje spouštět Java aplikace. Principiálně by nám stačilo JRE, ale instalace JDK bude lepší volba, zabráníme tak nechtěným překvapením.
- jdeme na stránku http://www.oracle.com/technetwork/java/javase/downloads/index.html
- vybereme „download Java JDK“, například verzi jdk1.8.0_101
- akceptujeme licenci kliknutím na „(o) Accept License Agreement“
- vybereme soubor ke stažení podle architektury procesoru (x86, x64) a verze OS
pro 32bit Kali linux – stahujeme soubor jdk-8u101-linux-i586.tar.gz
pro 64bit Kali linux – stahujeme soubor jdk-8u101-linux-x64.tar.gz - soubor by se nám měl uložit do adresáře /root/Downloads
Instalace Javy
Otevřeme terminál, přepneme se do adresáře /root/Downloads a rozbalíme archiv s příponou tar.gz.
1 2 3 |
cd /root/Downloads tar -xvf jdk-8u101-linux-x64.tar.gz |
Příkaz tar s parametrem -xvf rozbalí kompresovaný archiv. Uvnitř archivu je adresář „jdk-8u101“, který se po rozbalení objeví v aktuálním pracovním adresáři (/root/Downloads).
Instalace Javy
Rozbalenou Javu můžeme ihned používat, pokud bychom si nastavili proměnnou prostředí JAVA_HOME na cestu /root/Downloads/jdk-8u101/bin.
To ale dělat nebudeme, protože operační systém Kali linux, a deriváty Debian linuxu, mají udělátko s názvem „update-alternatives“, které umožňuje přepínat symbolické odkazy. Tato funkcionalita nám umožní do operačního systému nainstalovat nové verze Javy a přepínat je podle potřeby. Jinak řečeno nemůžeme nic pokazit a vždy se můžeme vrátit k předešlé verzi.
Přesun instalace do /opt
Nejdříve si přesuneme celý adresář „nové Javy“ do adresáře /opt, který slouží k uživatelským instalacím softwaru.
1 |
mv /root/Downloads/jdk1.8.0_101 /opt |
Tím se nám naše nová instalace JDK přesunula do adresáře /opt/jdk1.8.0_101 a bude nezávislá na tom, co se zrovna děje v domovském adresáři uživatele root a jeho podadresáři Downloads.
Registrace nové Javy
Zaregistrujeme si novou instalaci Javy pomocí sady příkazů „update-alternatives“.
1 2 3 |
update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_101/bin/java 1 update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_101/bin/javac 1 update-alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so mozilla-javaplugin.so /opt/jdk1.8.0_101/jre/lib/amd64/libnpjp2.so 1 |
Nastavíme symbolické odkazy
1 2 3 |
update-alternatives --set java /opt/jdk1.8.0_101/bin/java update-alternatives --set javac /opt/jdk1.8.0_101/bin/javac update-alternatives --set mozilla-javaplugin.so /opt/jdk1.8.0_101/jre/lib/amd64/libnpjp2.so |
Otestujeme verzi Javy
Spustímě příkaz java s parametrem „-version“.
1 2 3 4 5 |
java -version java version "1.8.0_101" Java(TM) SE Runtime Environment (build 1.8.0_101-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode) |
Z výpisu vidíme, že nová verze je v systému správně nastavena. Nyní můžeme spouštět libovolné Java aplikace v nové verzi JDK.
Jak přepínat verze Javy
Příkaz „update-alternatives –config java“ zajistí přepínání mezi existujícími instalacemi Javy (JDK). Tento příkaz spustíme pouze pro kontrolu, abychom viděli ostatní zaregistrované verze. Stiskem klávesy CTRL + C opustíme nabídku. Pokud bychom chtěli nastavit jinou verzi Javy, stačí potvrdit volbu číslicí.
1 2 3 4 5 6 7 8 9 10 11 |
update-alternatives --config "java" There are 3 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 auto mode * 1 /opt/jdk1.8.0_101/bin/java 1 manual mode 2 /opt/jdk1.8.0_102/bin/java 1 manual mode 3 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode Press <enter> to keep the current choice[*], or type selection number: |
Více informací o příkazu update-alternatives naleznete v jeho manuálových stránkách.
Možné trable
Na co můžete ještě narazit?
Osobně jsem se snažil na 64bit Kali linuxu instalovat 32bitovou Javu (jdk1.8.0_102), což by mělo v 64bit OS na architektuře procesoru x86-64 fungovat.
Příkaz java –version prošel, ukázal novou verzi, ale při startu aplikace Burp Suite jsem dostával výjimku o chybě v AWT komponentě. To jsou třídy pro grafická rozhraní – GUI.
1 2 3 4 |
root@kali:/opt/jdk1.8.0_102/bin# burpsuite java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit at java.awt.Component.<clinit>(Component.java:593) at burp.StartBurp.main(Unknown Source) |
Instalace Javy je v pořádku, ale v operačním systému chybí 32bitové knihovny, které Java nativně volá. To se dá pochopit, proč by 64bit OS měl po disku tahat ještě staré 32bitové knihovny.
Pokud se příkazem ldd podíváme, jak je „slinkovaná“ knihovna awt, zjistíme, které knihovny nám chybí – záznamy s popiskem „not found“.
1 2 3 4 5 6 7 8 9 10 11 |
ldd /opt/jdk1.8.0_102/jre/lib/i386/libawt.so linux-gate.so.1 (0xf77fa000) libjvm.so => not found libm.so.6 => /lib32/libm.so.6 (0xf76d3000) libdl.so.2 => /lib32/libdl.so.2 (0xf76ce000) libjava.so => /opt/jdk1.8.0_102/jre/lib/i386/./libjava.so (0xf76a9000) libc.so.6 => /lib32/libc.so.6 (0xf74f6000) /lib/ld-linux.so.2 (0x56602000) libjvm.so => not found libverify.so => /opt/jdk1.8.0_102/jre/lib/i386/./libverify.so (0xf74e9000) libjvm.so => not found |
Nějakou chvíli jsem se snažil do systému „nakopat“ chybějící knihovny, ale nakonec jsem to vzdal a zkusil raději 64bitovou verzi Javy. Tímto se blížíme k samotnému závěru.
Závěr
V dnešní kuchařce jsme si ukázali, jak v Kali linuxu správně zaintegrovat novou verzi prostředí pro Javu a nahradit tak „zavšivené“ OpenJDK.
Pokud jde o nástroj Burp Suite, tak po přechodu na Oracle Javu přežil další testy a už nespadl. Po nějaké době vyšla verze Burp Suite 1.7.0.7, která se snaží „obcházet“ OpenJDK chyby, ale to mě moc neuklidnilo. Přeci jenom používám i jiné Java aplikace a nechci, aby mi během testování padaly.
Máte vlastní zkušenosti s padajícími Java aplikacemi? Nefunguje vám uvedený postup? Napište nám a podělte se o svoje vědomosti.
To je pro dnešek vše. Zvažujete-li cestu etického hackera od začátku, rád uvidím na hacking kurzech.