Pytanie:
Dlaczego słyszę o tylu zagrożeniach związanych z Javą? Czy inne języki są bezpieczniejsze?
gsingh2011
2014-05-09 22:39:24 UTC
view on stackexchange narkive permalink

Bardzo podoba mi się język programowania Java, ale ciągle słyszę o tym, jak niebezpieczny jest on. Wyszukiwanie w Google „niezabezpieczona java” lub „luki w zabezpieczeniach java” powoduje wyświetlenie wielu artykułów omawiających, dlaczego należy odinstalować lub wyłączyć Javę, aby chronić swój komputer. Java często publikuje ogromną liczbę poprawek bezpieczeństwa naraz, a mimo to wciąż pozostaje mnóstwo luk do załatania.

Rozumiem, że zawsze będą błędy w oprogramowaniu, ale ilość luk w zabezpieczeniach Java nie wydaje się normalne (czy sobie to wyobrażam?). Jeszcze bardziej zagmatwane jest to, że jeśli istnieje jedna decyzja architektoniczna, która tworzy te luki, dlaczego nie zmienić tego projektu? Istnieje mnóstwo innych języków programowania, które nie mają tego problemu, więc musi istnieć lepszy sposób na zrobienie tego, co Java robi źle. Dlaczego więc Java jest nadal tak niepewna?

Uważam, że to naprawdę niesprawiedliwe, że niektórzy ludzie twierdzą, że java byłaby „niepewna”, ponieważ jej koncepcja piaskownicy ma kilka wad, podczas gdy większość innych technologii nie ma nawet piaskownicy i pozwala programom robić praktycznie wszystko, co chcą na maszynie, na której działają. Krytyka jest uzasadniona tylko w naprawdę wąskim przypadku użycia apletów uruchamianych w przeglądarce internetowej, gdzie alternatywy, takie jak Flash, mają równie złe wyniki w zakresie bezpieczeństwa.
Twoje pytanie jest podobne do pytania „Dlaczego samochody nadal mają problemy z silnikiem?”. (A dla tych, którzy przychodzą pod kątem „C (++) tego nie ma!”, Dodaj „Mój rower nigdy ich nie ma!”)
Ponieważ był prześladowany jako dziecko.
Java ma stosunkowo * niewiele * luk w zabezpieczeniach dla pełnoprawnego języka programowania, który może działać w przeglądarce (większość innych języków obsługujących przeglądarkę nie jest w stanie wykonywać pewnych czynności). - Luki, o których ostatnio słyszałeś, to całkowicie złośliwe aplikacje (czytaj Aplety), które znajdują sposób na wydostanie się z piaskownicy i wykonanie dowolnego kodu w systemie. Może istnieć argument, że aplety są częścią javy, którą należy zaprzestać, jednak wiele technologii nadal na nich opiera się (konsole IMPI, witryny banków itp.).
@Philipp: Nie sądzę, żeby to było niesprawiedliwe. Jeśli język jest promowany jako piaskownica, ale jego piaskownica ma historię dziesiątek do setek krytycznych luk każdego roku, jest całkowicie sprawiedliwe, aby potępić go jako niepewny. Bezpieczeństwo nie jest sprawą absolutną, ale kwestią przestrzegania opublikowanej umowy. Być może nie jest sprawiedliwe porównywanie Javy i C ++, ale z pewnością porównywanie Javy i Lua. Jeśli się nie mylę, ten ostatni nie przeszedł nawet jednocyfrowych wartości luk w zabezpieczeniach przed ucieczką w piaskownicy.
@R .. Sandboxing dotyczy tylko bardzo wąskiego kontekstu, a są to aplety Java w przeglądarkach internetowych. Jeśli chcesz powiedzieć, że są one niepewne, całkowicie się zgadzam. Ale jak można wywnioskować z tego pytania, wiele osób rozszerza tę krytykę ogólnie na Javę, która obejmuje przypadki użycia, w których problemy z piaskownicą apletów nie mają w ogóle znaczenia.
@R .. Porównanie Javy do Lua również nie jest sprawiedliwe, ponieważ Java jest językiem ogólnego przeznaczenia z [ogromną biblioteką standardową, która zawiera wszystko oprócz zlewu kuchennego] (http://docs.oracle.com/javase/8 /docs/api/allclasses-noframe.html), podczas gdy Lua ma [bardzo małą standardową bibliotekę] (http://www.lua.org/manual/5.2/) i ma być osadzona w aplikacji hosta, która dodaje domenę -specyficzne powiązania skryptów z lua, które mogą być bezpieczne lub nie.
Moim zdaniem jest to całkowicie sprawiedliwe, ponieważ ogromna standardowa biblioteka * zaimplementowana poza piaskownicą * zasadniczo wyklucza możliwość zaoferowania bezpiecznego środowiska piaskownicy. Jest to jedna z rzeczy, w których Java bardzo się pomyliła, a Lua miała rację.
Zgadzam się, że „Java the language” zyskuje wiele negatywnego rozgłosu, ponieważ „Java the sandbox” jest tak zepsuta. To, czy jest to „sprawiedliwe”, czy nie, jest kwestią oceny, ale jest to konsekwencja decyzji marketingowej o ścisłym połączeniu tych dwóch. W większości systemów samo zainstalowanie Javy (w jakimkolwiek celu) powoduje również zainstalowanie komponentów przeglądarki, które narażają system na krytyczne zdalne luki w zabezpieczeniach, jeśli używana jest przeglądarka, więc można śmiało powiedzieć, że wystarczy zainstalować Javę, chyba że zszedłeś z drogi, aby zablokować jego użycie w przeglądarce, jest problemem bezpieczeństwa.
@R .. Firma, dla której pracowałem, używała LotusNotes wyłącznie dlatego, że niewielu ludzi z niego korzystało, więc luki w zabezpieczeniach, które z pewnością miały (jak wszystko), pozostały niewykryte. Obawiam się, że java jest po przeciwnej stronie. Każda wada, którą ma **, zostanie ** odkryta, nie oznacza, że ​​inne rzadziej używane rzeczy są bezpieczniejsze, po prostu mniej osób próbuje je złamać
@R .. „z pewnością porównywanie Javy i Lua jest uczciwe. Jeśli się nie mylę, ta ostatnia nawet nie przeszła jednocyfrowych liczb dotyczących luk w zabezpieczeniach przed ucieczką z piaskownicy”. Zgodnie z tym argumentem, naprawdę wszyscy powinniśmy używać PostScript, ponieważ ma on jeszcze mniej takich luk. (PostScript _does_ w rzeczywistości oferuje sandboxing i jeśli poprawnie skonfigurowany może pozwolić na bezkarne wykonanie wrogiego kodu, FYI) (Jeśli nie rozumiesz tego, co mówię, to znaczy, że Java ma więcej _wykrytych_ luk w zabezpieczeniach, ponieważ Java jest używana _ daleko częściej_ niż Lua.)
W rzeczywistości PostScript ma w przeszłości sporo luk w zabezpieczeniach, zwłaszcza jeśli weźmie się pod uwagę środowisko, w którym ma być używany. Każdy język zgodny z Turingiem jest luką DoS w kontekście tego, do czego przeznaczony jest PostScript (dokumenty), zwłaszcza gdy jesteś uruchamianie go na mikrokontrolerach 1MHz wewnątrz drukarek.
Jeśli chodzi o Javę i Lua, nie ma znaczenia, jak często są używane. To kwestia projektu. Lua ma niewielką liczbę potencjalnych awarii (jeden z nich był idiotyczny: pozwolenie kodowi Lua na przesłanie kodu bajtowego bezpośrednio do maszyny wirtualnej). Java ma astronomiczną liczbę.
Oczywiście dla hakerów (białych kapeluszy) badanie wulnów języka Java jest bardziej interesujące niż w innych językach, podobnie jak w przypadku innych systemów operacyjnych Windows.
Może mógłbyś wyjaśnić, jaki jest kontekst twojego oświadczenia. Wygląda na to, że stwierdzasz, że uważasz, iż kod Java może wymagać naprawy, a opiekunowie oprogramowania nie wykonują wystarczająco dobrej pracy? Każda aplikacja będzie miała własny odpowiedni typ kodu do zaimplementowania, więc należy unikać polegania na jednym zestawie praktyk kodowania. Założę się, że aplikacje Java po stronie klienta przejdą przez Flash i wkrótce wymrą.
Hah, porozmawiajmy o niesprawiedliwości: rozwijamy [przeglądarkę w Javie] (https://github.com/UprootLabs/gngr) i ludzie mylą ją z apletami lub kojarzą ją z Javą, którą mylą z apletami lub kojarzą piaskownica menedżera bezpieczeństwa z bardziej szczegółową piaskownicą apletów ... i tak dalej.
Siedem odpowiedzi:
Steffen Ullrich
2014-05-09 23:24:59 UTC
view on stackexchange narkive permalink

Jeśli używasz języka Java tak jak większości innych języków programowania, np. do pisania samodzielnych aplikacji jest nie mniej bezpieczny niż inne języki i bezpieczniejszy niż C lub C ++ ze względu na brak przepełnień bufora itp.

Jednak Java jest regularnie używana jako wtyczka w przeglądarce internetowej, np. podobny do Flasha. Ponieważ w tym przypadku użytkownik uruchamia niezaufany kod bez jego jawnej instalacji, chodzi o to, aby kod działał w ograniczonej piaskownicy, gdzie nie powinien być w stanie w jakiś sposób działać przeciwko systemowi lub użytkownikowi (np. Czytać lokalne pliki i wysyłać na stronę internetową, przeskanuj sieć lokalną itp.). I tu właśnie zawodziła Java w ostatnich latach, np. nowe błędy pojawiały się czasami codziennie, co pozwalało na ucieczkę z piaskownicy.

Ponadto czasami błędy w interpreterze kodu bajtowego lub natywnych bibliotekach prowadzą do przepełnienia bufora i mogą zagrozić systemowi, ale pod tym względem Flash jest zwykle uważany za gorszy.

A jeśli chodzi o inne języki, które są lepsze: zwykle nie mogą one nawet działać jako niezaufany kod w piaskownicy (wyjątkiem jest JavaScript i może Flash), więc byłyby jeszcze gorsze, ponieważ nie ma nieodłącznego sposobu aby ograniczyć ich interakcję z systemem.

Zatem aplikacje Java na serwerach i na komputery mają mniej luk w zabezpieczeniach niż aplety Java?
Tak, głównym problemem bezpieczeństwa jest tylko piaskownica.
Brak przepełnienia stosu? Właśnie dzisiaj przypadkowo uruchomiłem jeden z nieskończoną rekurencją. Czy chodziło Ci o przepełnienie bufora?
Tak, mam na myśli przepełnienia bufora. Dzięki za poprawienie. I nadal możesz je zdobyć, ale nie są tak wszechobecne jak w C, C ++.
Java na serwerze pozwala Oracle na sprzedaż licencji na bazy danych itp., Jednak aplety java nie mają sensu dla firmy Oracle, dlatego nie oczekuj, że Oracle podejmie więcej niż ręczne wysiłki w celu wyeliminowania związanych z nimi luk w zabezpieczeniach.
@IanRingrose Nie zgadzam się. Akcjonariusze Oracle nie są zobowiązani do wykonywania więcej niż minimalnej konserwacji, ale do tej pory wydaje się, że traktują luki w zabezpieczeniach dość poważnie. Jak wskazano, luki w zabezpieczeniach znajdują odzwierciedlenie w całym systemie, a aplikacje i aplety aplikacji internetowych są zwykle zabezpieczane przez aplikacje serwerowe w języku Java. Ogólnie nie wydaje mi się, aby nic nie wskazywało na to, że Oracle nie traktuje poważnie tych awarii. Zwróć też uwagę, że sami programiści często mają silne poczucie odpowiedzialności, niezależnie od samej firmy. Czarno-białe stwierdzenia są tutaj bezużyteczne.
@Lekensteyn Specyfikacje języka Java wymagają, aby implementacje wykrywały przepełnienia stosu i zgłaszały wyjątek. W C / C ++ jest to po prostu niezdefiniowane zachowanie ze wszystkim, co się z tym wiąże. Więc do pewnego stopnia „przepełnienie stosu” nadal tam działa.
@SteffenUllrich do rozwinięcia - to dlatego, że piaskownica próbuje zawierać / ograniczać możliwości pełnoprawnego języka programowania. W przeciwieństwie do niektórych innych języków obsługujących przeglądarkę, które zostały początkowo zaprojektowane bez pewnych możliwości (tj. Nie ma znaczenia, czy wyjdziesz z piaskownicy, ponieważ nadal nie możesz zrobić pewnych rzeczy). Dopóki w Twojej przeglądarce działa pełnoprawny język programowania, będzie on mógł wykonywać różne czynności w systemie lokalnym. Aplety Java są nadal bardzo potężne (konsole IMPI itp.).
Twoje równanie apletów Java i JavaScript jest fałszywe. JavaScript jest nieodłączną funkcją przeglądarki, a Java wymaga jawnej, oddzielnie zainstalowanej wtyczki. Exploit JavaScript w jednej przeglądarce nie jest taki sam jak w drugiej, ale exploit apletu działa * wszędzie *, ponieważ wtyczka jest taka sama * wszędzie *. Ponadto JavaScript nie jest przeznaczony do zapewniania funkcji systemu operacyjnego w większości przeglądarek i można go na różne sposoby w piaskownicy (zapobiegać wykonywaniu kodu natywnego). Lepiej jest zrównać Javę i Flash.
*** Wielki jęk *** dotyczący „np. Podobny do JavaScript”. Samo umieszczenie ich w tym samym zdaniu jest błaganiem o zamieszanie; tak naprawdę nie są do siebie podobne, a JS naprawdę nie działa jak wtyczka. Właśnie przeczytałem wszystkie komentarze ... Co powiedział @DCKing.
JavaScript @DCKing: w rzeczywistości nie jest tak wbudowany w przeglądarkę, jak mogłoby się wydawać; Interpretery JavaScript, takie jak Rhino, SpiderMonkey i V8, w rzeczywistości mogą działać niezależnie od przeglądarki, do której zwykle są podłączone. Istnieje pewien rodzaj interfejsu wtyczki między aplikacją hosta (niekoniecznie przeglądarką) a wszystkimi popularnymi silnikami Javascript.
@LieRyan To argumentacja semantyki. Każda większa przeglądarka korzysta z innej implementacji JavaScript, a osoby atakujące wymagają różnych luk w zabezpieczeniach dla każdej z nich. Wtyczki są wszędzie takie same. O to chodzi.
meriton
2014-05-10 16:48:48 UTC
view on stackexchange narkive permalink

Zgłoszone luki w zabezpieczeniach nie dotyczą Javy (języka programowania), która z powodu wymuszania przez JVM bezpieczeństwa pamięci jest w rzeczywistości bardziej niezawodna niż języki takie jak C lub C ++, w których dochodzi do przepełnienia bufora a nadmierne odczyty bufora pozostają zagrożeniem i mogą skutkować bałaganem takim jak Heartbleed.

Zamiast tego zgłoszone luki znajdują się w Java Sandbox, która próbuje wymusić model przywilejów, który pozwala na bezpieczne wykonanie niezaufanego kodu, i jest najbardziej znany, aby umożliwić automatyczne wykonywanie apletów Java w przeglądarce. Ta piaskownica jest usiana dziurami. Ponadto Oracle wydaje poprawki („aktualizacje krytyczne”) tylko 4 razy w roku. Nie trzeba mówić, że producenci przeglądarek nie są z tego zadowoleni. Na przykład Firefox wymaga autoryzacji użytkownika do uruchomienia apletu Java od wersji Firefox 26.

Powodem, dla którego prasa nie czyni tego rozróżnienia, jest fakt, że Oracle używa języka „Java” znak towarowy zarówno dla języka programowania, jak i wtyczka do przeglądarki, która uruchamia aplety. W rzeczywistości, jeśli zwykły użytkownik napotka znak towarowy Java, prawdopodobnie odnosi się do tego drugiego.

Jest nieco spekulatywne, dlaczego dokładnie Sandbox pozostaje podatny na ataki. Jeśli o mnie chodzi, jednym z powodów jest to, że ten sam interfejs API jest używany zarówno z piaskownicą, jak i bez niej, a większość kodu Java działa bez piaskownicy (ponieważ kod jest zaufany). W rezultacie programista może zapomnieć o tej niejasnej funkcji podczas zmiany interfejsu API języka Java lub jego implementacji, przypadkowo ujawniając rzeczy, które powinny być chronione (aby zilustrować, jakie to łatwe, zobacz długie Wytyczne dotyczące bezpiecznego kodowania dla Java SE). Innym, ale powiązanym powodem jest sam rozmiar interfejsu API języka Java ( 5800 klas i prawie 50 000 metod w przypadku języka Java SE 6).

IMHO to najlepsza odpowiedź, ponieważ dotyka złożoności zabezpieczenia API, które próbuje zrobić wszystko. Całkowicie zamurowana wersja Java dla apletów (bez IO) przyniosłaby wiele ulgi, ale obecne API jest po prostu zbyt ściśle powiązane.
Jedynie wołowiny, które mam z tą odpowiedzią, to 1) Heartbleed był * nie * wynikiem ataku przepełnienia bufora. 2) Z oczywistych powodów nie można również powiedzieć, że język połączony z maszyną wirtualną jest „lepszy” niż inny język sam w sobie. Poza tym, dobra uwaga na temat prawdziwych dziur w tej piaskownicy, język programowania nie jest bardziej „bezpieczny” ani „niebezpieczny” niż język ludzki, wszystko sprowadza się do kompilatora lub interpretera i * najważniejsze * najważniejsze: osoba * używająca * języka.
1) Ok, według Wikipedii Heartbleed był raczej przepełnieniem bufora niż przepełnieniem bufora, ponieważ dostęp poza jego długością był raczej dostępem do odczytu niż zapisu. Poprawi terminologię. 2) Myślę, że to poprawne porównanie, ponieważ specyfikacja języka Java ** Language ** [mandates] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls -15.10.4), że środowisko wykonawcze przeprowadza to sprawdzenie. W Javie bezpieczeństwo pamięci jest funkcją języka. W C lub C ++ tak nie jest.
dimo414
2014-05-11 00:55:51 UTC
view on stackexchange narkive permalink

Jest mnóstwo innych języków programowania, które nie mają tego problemu, więc musi istnieć lepszy sposób na zrobienie tego, co Java robi źle.

To ładny wysokie roszczenie, gdzie odniosłeś takie wrażenie? Istnieje „mnóstwo innych języków programowania”, które nie zostały poddane takim samym testom jak Java lub są używane tak samo powszechnie.

Zasadniczo przyczyną tak wielu poprawek zabezpieczeń jest to, że Java była zaprojektowane z myślą o bezpieczeństwie, z wieloma funkcjami zorientowanymi na bezpieczeństwo, których nie mają inne języki.

Środowisko języka Java

1.2.2 Solidna i bezpieczna

Technologia Java została zaprojektowana do działania w środowiskach rozproszonych, co oznacza, że ​​bezpieczeństwo ma ogromne znaczenie. Dzięki funkcjom bezpieczeństwa zaprojektowanym w języku i systemie wykonawczym, technologia Java umożliwia tworzenie aplikacji, których nie można zaatakować z zewnątrz. W środowisku sieciowym aplikacje napisane w języku programowania Java są zabezpieczone przed włamaniami ze strony nieautoryzowanego kodu próbującego dostać się za kulisy i stworzyć wirusy lub zaatakować systemy plików.

Jeśli nie uwzględnisz „bądź bezpieczny” w specyfikacjach swojego języka programowania, rzadko będziesz musiał publikować poprawki bezpieczeństwa. Z drugiej strony, jeśli jest to jeden z twoich określonych celów, trudno będzie, tego nie .

Thomas Pornin
2014-05-16 20:43:43 UTC
view on stackexchange narkive permalink

Java sama w sobie ma duże zalety w zakresie bezpieczeństwa, a mianowicie jej nieodłączną odporność na przepełnienia bufora i błędy zarządzania pamięcią:

  • Wszystkie dostępy do tablic są sprawdzane pod kątem przydzielonej długości tablicy. Przepełnienia bufora są zatem niezawodnie przechwytywane i wyzwalają wyjątek, który jest lepszy (zmienia to podatność na zdalne wykonanie kodu w zwykłą odmowę usługi).

  • Alokacja pamięci jest zarządzana poprzez moduł odśmiecania pamięci, który zapobiega błędom typu „after-free” i „double-free”. Ponadto GC pozwala na łatwiejszą obsługę ciągów znaków (w Javie ciągi znaków są niezmienne), co eliminuje większość przypadków błędów związanych z przepełnieniem buforu.

  • Wymuszane jest ścisłe wpisywanie; kod nie może uzyskać dostępu do bajtów danych, ponieważ nie są. To z kolei zapobiega lukom w zabezpieczeniach (błędy polegające na naruszeniu typów danych będą zgłaszane podczas kompilacji lub, w najgorszym przypadku, jako wyjątek ClassCastException) w czasie wykonywania.

To sprawia, że ​​Java jest znacznie silniejsza niż wiele języków programowania (w szczególności piekielna para C / C ++), jeśli chodzi o bezpieczeństwo.

Jednak projektanci Java próbowali wykorzystać to ulepszone bezpieczeństwo utrudnić coś, np. aplety. Problem polega na powierzchni ataku : ponieważ aplet jest potencjalnie wrogim kodem, wszystko, co robi, musi być kontrolowane. Ale wrogi kod musi być w stanie używać „standardowych klas Javy”, jeśli ma coś zrobić, więc „punkty kontrolne” muszą być egzekwowane w każdej pojedynczej standardowej klasie Javy. Powierzchnia ataku składa się zatem z setek klas zawierających tysiące metod i wszystkie z nich muszą wymuszać odpowiednie sprawdzenia.

Projektanci Javy zgrzeszyli ambicją: trudność we wdrożeniu tysięcy czeki bez spartania żadnego były znacznie wyższe, niż sobie wyobrażali. Wszystkie "błędy Java" pochodzą z tego faktu.

Tutaj możemy porównać Javę z Javascriptem; na przykład Java umożliwia dostęp do plików na dyskach, ale to prawo nie może być przyznane apletom, chyba że aplet o to poprosił, a użytkownik wyrazi na to zgodę (co pociąga za sobą cały biznes związany z podpisywaniem apletów). Javascript, mniej ambitny, po prostu nie ma żadnej metody dostępu do plików: kontrola dostępu do funkcji nie może być zaimplementowana nieprawidłowo, jeśli funkcja nie istnieje!

Podsumowując: Java jest w porządku i bezpieczne. Aplety Javy oznaczają ogromną powierzchnię ataku, której bezpieczeństwo jest bardzo trudne do zapewnienia. Jednak w przypadku samodzielnych aplikacji i serwerów używanie języka Java jest dobrym pomysłem, jeśli zależy Ci na bezpieczeństwie (dotyczy to również języka C #).

Nitpick: To bardziej przypomina tysiące klas i dziesiątki tysięcy metod. Poza tym: świetna odpowiedź!
Kasun
2014-05-10 01:53:36 UTC
view on stackexchange narkive permalink

W dzisiejszych czasach znalezienie większej liczby luk w zabezpieczeniach może nie oznaczać, jak niepewne jest oprogramowanie. Problem polega na tym, jak reaguje na to zespół ds. Bezpieczeństwa każdego dostawcy oprogramowania i jak szybko pojawiają się łaty.

Po prostu sprawdź, jak szybko są załatane przeglądarki Firefox i Chrome. Wiele luk zostało na nich również znalezionych i usuniętych.

O ile pamiętam, Oracle ma program o nazwie Critical Patch Updates (CPU), który co kwartał wydaje mnóstwo poprawek. Wydają też łaty bez procesora, jeśli istnieje luka dnia zerowego. Ale problem polega na tym, że Oracle zajmuje czas, aby opublikować poprawkę.

Zgadzam się z pierwszym zdaniem. Nie * znajdowanie * luk w zabezpieczeniach w innym oprogramowaniu nie oznacza, że ​​ich nie ma - czy ludzie patrzą (równie uważnie)?
John
2014-05-14 06:58:17 UTC
view on stackexchange narkive permalink

Przerażony strach ... Sama Java jest w porządku; problemy pojawiają się w przypadku starszych apletów Java działających w przeglądarkach internetowych, ale wątpię, czy ktokolwiek faktycznie tworzy już aplety - większość firm programistycznych używa Flasha lub HTML4 / 5 do interfejsów internetowych front-end przez co najmniej ostatnie 10 lat.

Obecnie Java jest używana głównie w backendowych JEE, front-endowych klientach GUI (JFX / AWT / SWING), aplikacjach konsolowych i aplikacjach mobilnych - stąd nie ma problemu.

SSpoke
2014-05-11 08:07:39 UTC
view on stackexchange narkive permalink

Odpowiedź jest dość oczywista. Czy możesz usunąć pliki komputerowe za pomocą JavaScript, HTML lub Flash? Nie, nie możesz.

A co z Javą. Czy możesz usunąć wszystkie swoje pliki, całkowicie wyczyścić dysk twardy za pomocą apletu Java (hostowanego na stronie internetowej)? Odpowiedź brzmi: tak, jeśli zgadzasz się na uruchomienie apletu. W przeciwieństwie do innych języków przeglądarek internetowych.

Java może wykonywać takie czynności, jak wykonywanie programów na komputerze (pliki wykonywalne), a także zapisywać, aktualizować lub usuwać pliki na dysku twardym.

Ponadto Java aplety nie są wykrywalne przez skanery antywirusowe: w większości przypadków nawet nie wiesz, że zepsuły one komputer. Niektóre skanery mogą wykryć, że coś próbuje usunąć pliki w katalogu zastrzeżonym: Znam tylko Kaspersky, ale większość ludzi ma domyślnie wyłączoną tę funkcję.

Aplety Java mogą rób rzeczy, takie jak aktualizowanie plików systemu Windows, takich jak HAL.dll , co zapobiegnie uruchomieniu komputera. Jeśli zgodzisz się uruchomić aplet, może zrobić wszystko na twoim komputerze.

W niektórych przypadkach nie ma nawet znaczenia, czy aplet Java jest podpisany, czy nie - nadal będzie pobierał pliki na twój komputer.

Nie wspominając o Javie jest bardzo popularna.

Jest jeszcze jeden, który zyskuje na popularności, zwany Unity Engine (podobny do Flash): ma ten sam problemy z bezpieczeństwem, takie jak Java i mogą zrobić wszystko z twoim komputerem. Jedyną różnicą między Unity Engine a Javą jest to, że Unity działa bez pytania, czy chcesz go uruchomić, czy nie. Więc jeśli ktoś ma zainstalowany Unity Player i uruchamia grę zawierającą wirusa, zepsuje to twój komputer.

Mniej popularna, ale potencjalnie niezwykle szkodliwa jest VBScript. Wydaje mi się, że obecnie tylko Microsoft Internet Explorer to obsługuje, ale mogę się mylić. Ma takie same możliwości jak Java.

„Odpowiedź jest dość oczywista. Czy możesz usunąć pliki na komputerze za pomocą JavaScript, HTML lub Flash?” Tak, mogę. Potrzebuję tylko odpowiedniego exploita w silniku JavaScript lub wtyczce Flash.
Wiele czynników związanych z tym, że musisz wybrać konkretną wersję Flasha i JavaScript, wydaje się, że każda przeglądarka używa do tego własnego silnika, tak, mimo wszystko, możesz być w stanie określić pewien procent, ale są niewielkie szanse, że osoba, która się martwi, zostanie dotknięta, z językiem, który robi to bez hakowania kodu, tylko zwykły programista może to zrobić bez problemu z Javą / Unity itp., jeśli jest zły, oczywiście, po prostu próbuje powiedzieć, że ludzie nie powinni ufać czemuś, co szkodzi, nawet tego nie ukrywając. Nic nie wkurza mnie bardziej niż małe dzieciaki, które próbują mnie oszukać keyloggerami. Ha ha
Aplety Java są również ogólnie chronione przed takimi scenariuszami, jak możliwość wymazania systemu plików - najpierw musisz wykonać pewne unikanie piaskownicy, które również wymaga kierowania na określone wersje i zero dni. Z tej perspektywy wtyczki Java i Flash znajdują się mniej więcej w tej samej łodzi.
Flash miał również spory udział w exploitach. W przypadku każdego języka, który jest „interpretowany” przez silnik natywny i zawiera błędy programistyczne (przeważają przykłady w języku Java, Flash), można uciec od zbudowanej przez siebie piaskownicy i wpłynąć na system hosta, być może nawet wstrzykując natywny kod, który może wtedy wykorzystać błąd eskalacji uprawnień hosta.
„Odpowiedź brzmi: tak, jeśli akceptujesz uruchomienie apletu”.Jest to całkowicie błędne, jeśli mówimy o apletach (a my jesteśmy, bo inaczej, cóż, wszystkie zakłady są wyłączone i mam nadzieję, że wiesz, co zainstalowałeś na „nominalnym” komputerze).Zobacz: [Uprawnienia w zestawie Java Development Kit (JDK)] (http://docs.oracle.com/javase/7/docs/technotes/guides/security/permissions.html)


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...