Pytanie:
Czy bezpieczniej jest programować system klient-serwer w języku innym niż angielski?
GuiRitter
2018-04-30 18:48:20 UTC
view on stackexchange narkive permalink

Tworzę system z komunikacją przez REST między frontem (JavaScript) a zapleczem (Java / Spring) i pojawiło się to pytanie.

Czy to sprawia, że ​​system jest bezpieczniejszy do nazywania zmiennych, Adresy URL itp. W języku innym niż angielski?

Wyobrażam sobie, że mogłoby to być możliwe, ponieważ ponieważ najważniejsze języki programowania są w języku angielskim, prawdopodobnie większość programistów zna go przynajmniej trochę. Nazwanie naszych rzeczy w innym języku może utrudnić włamanie, ponieważ atakujący miałby trudniej zrozumieć, co oznacza i co robi.

Nie mogłem znaleźć wyników w Google, ponieważ „programowanie” „języka” razem uniemożliwiają znalezienie wyników dotyczących innego znaczenia terminu „język”.

[Powiązane] (https://security.stackexchange.com/questions/35828/obfuscating-javascript-code)
Wiele JavaScript jest już zaciemnionych / zminimalizowanych ze względu na rozmiar / wykorzystanie przepustowości.
@Joe Alternatywnie, [powiązane] (https://xkcd.com/257/)
jeśli uznasz czas za aspekt bezpieczeństwa, to _ tak_, włamanie się do złego kodu zajmie więcej czasu, co czyni go bezpieczniejszym.
Każde dobre narzędzie programistyczne pozwoliłoby komuś na zmianę nazw zmiennych w zakresie, więc nawet jeśli początkowo nie jesteś pewien, co oznacza zmienna `gezhundheit`, możesz zmienić jej nazwę na` Rzecz1`, aby była czytelna w języku angielskim (lub w wybranym przez Ciebie języku)dopóki nie przeanalizujesz, że nazwa powinna zostać zmieniona na „BlessYou” i przejdź dalej.
Każdego dnia na całym świecie ludzie uczą się kodować, zanim zaczną naukę angielskiego, więc w pewnym sensie pracują głównie z pojęciami, a nie ze znaczącymi słowami, które można przetłumaczyć.
Sugerujesz język rosyjski, mandaryński, kantoński czy hindi?W każdym razie, jeśli język jest kompilowany bez symbolicznych informacji o debugowaniu, jaka jest różnica?Twój kod powinien być bezpieczny, mimo że jest czytelny, chcesz, aby był niezależnie sprawdzany, prawda?
Jeśli chcesz, aby kod był naprawdę trudny do odczytania, użyj wspólnego języka, ale błędnie nazwij swoje funkcje, typy i zmienne, aby nadać im czytelne, ale niepoprawne, mylące nazwy.Moi klienci robią to cały czas (żart, patrz poprzedni komentarz).
Utrudniłoby to zarówno ciebie, jak i atakującego.Aby utrudnić to tylko atakującemu, możesz użyć narzędzia (w swojej kompilacji) do zmiany nazw przedmiotów na nic nie znaczące.Wówczas nazwiska nie byłyby możliwe do przetłumaczenia za pomocą tłumacza języka.To byłaby niewielka poprawa bezpieczeństwa.Oczywiście, jeśli myślisz, że Twój kod * wymaga * zaciemniania, aby był bezpieczny, to z natury nie jest bezpieczny.
@dandavis Nie zgadzam się z tym stwierdzeniem.Złe kody zwykle zawierają więcej błędów, dlatego * łatwiej * jest zaatakować.Jeśli znajdziesz podatny punkt wstrzyknięcia SQL, nie przejmujesz się już kodem, a jedynie wykorzystaniem go.To samo z innymi lukami w zabezpieczeniach wstrzykiwania poleceń: gdy je znajdziesz, wykorzystanie jest kwestią prób i błędów.Zrozumienie ograniczonej części kodu, który tworzy lukę w zabezpieczeniach, ułatwia zrozumienie, jak go wykorzystać, ale wystarczy tylko próba i błąd.A zły kod = więcej dziur = szybciej znaleźć punkt nadający się do wykorzystania.
@dandavis - czy jest jakiś powód, by uważać kod napisany w języku innym niż angielski za zły, oprócz własnej fanatyzmu?
@Davor: bigoteria jest nieuzasadnioną _opinion_.OP nie sugeruje kodowania w innym języku mówionym, co jest w porządku, jeśli jest spójne, problem dotyczy stosowania niejasnych nazw zmiennych, czyli złego kodu.Mówiąc krótko: francuski programista używający nazw suahili to zły kod.
@dandavis - wyraźnie napisałeś, że używanie innych języków poza angielskim powoduje, że kod jest zły.Jeśli chciałeś powiedzieć coś innego, nie udało ci się.
Dein Attacker Savoir każde sformułowanie.
Jako ktoś, kto musiał czytać kod z japońskimi komentarzami, stwierdziłem, że japońskie komentarze są łatwiejsze do zrozumienia niż ich dziwna mieszanka notacji węgierskiej i głupio krótkich nazw zmiennych.Gdyby nazwy zmiennych były po japońsku, myślę, że byłoby o wiele łatwiejsze do odczytania, ponieważ mógłbym po prostu wyszukać nazwy w słowniku, zamiast próbować odgadnąć ich intencję na podstawie inicjałów.
Dziesięć odpowiedzi:
Peter Harmann
2018-04-30 19:03:36 UTC
view on stackexchange narkive permalink

Technicznie nieznacznie, tak. Ale:

  • Byłoby to zabezpieczenie przez zapomnienie, co jest złym pomysłem
  • To nie zwiększa zaufania do Twojego produktu
  • Bardzo łatwo byłoby dowiedzieć się, co robi, zajęłoby to tylko trochę czasu
  • Tłumacz Google, możesz po prostu używać bezsensownych nazw, to i tak niewiele by pomogło
  • Utrudniłoby to konserwację
  • Bardzo utrudniłoby przeprowadzanie audytów, ponieważ audytorzy mogą nie rozumieć języka

Biorąc pod uwagę wszystkie kwestie, prawdopodobnie nigdy nie warto to.

Aby podkreślić punkt widzenia Petera na temat konserwacji z pewnym osobistym doświadczeniem: już ciężko jest pracować na starym kodzie lub kodzie, który napisał ktoś inny.Dodanie obcego języka do miksu byłoby koszmarem.Podwójnie tak, jeśli komentarze nie są w języku angielskim.Jeśli Twój personel mówi w innym języku niż angielski, OK, rób, co chcesz.W przeciwnym razie dałbym pomysłowi twarde „Nie”.
@DoubleD:, mówisz, że manipulowanie kodem (inaczej konserwacja) jest „koszmarne”, ale potem mówisz „trudno nie” na „czy to jest bezpieczniejsze”?Jeśli nie mogę dowiedzieć się, jak coś działa lub jak skutecznie to zmodyfikować, czy nie jest to z definicji bezpieczniejsze, podobnie jak dodanie szpulek do zamka bębnowego, aby wydłużyć czas wybierania?
Powszechnym błędem jest przekonanie, że ochrona poprzez zaciemnienie jest „złym pomysłem” * per se *, ale nie jest to poprawne.Złym pomysłem jest * poleganie * na bezpieczeństwie dzięki niejasności.Jeśli stosujesz się do najlepszych praktyk w innym miejscu, może to być w porządku jako dodatkowy składnik do głębszej obrony.Często taka taktyka jest w najgorszym przypadku bezużyteczna, aw najlepszym przypadku minimalnie przydatna.Dobrym przykładem jest uruchomienie SSH na porcie innym niż domyślny.(Nie twierdzę jednak, że przykład PO jest uzasadniony).
[* „Wróg zna system.” *] (Https://en.wikipedia.org/wiki/Kerckhoffs%27s_principle)
Czuję, że bagatelizujesz ostatnie dwa punkty.Tego rodzaju niejasność utrudni innym dostrzeżenie słabości systemu, prawda?Wydaje mi się, że ta praktyka aktywnie * osłabia * bezpieczeństwo.
Największe luki, jakie widziałem, to błędy lub problemy z projektem aplikacji, które zostały wykryte podczas inspekcji kodu.Jeśli mam do czynienia ze zmiennymi o dziwnych nazwach, trudniej będzie znaleźć te luki.Jeśli już, to podejście sprawia, że jest mniej bezpieczna IMO.
@dandavis Naprawianie luk jest ważną częścią cyklu życia oprogramowania.Wszystko, co komplikuje ten proces, jest ogólnie złe, a dotyczy to szczególnie dni zerowych.Jeśli spowolnisz proces rozwoju, przedłużysz okno luki zero-day.Nie widzę znaczącej poprawy takiego podejścia.Poza tym to, że twoi programiści nie znają języka, nie oznacza, że twoi przeciwnicy też.Przypuszczam, że istnieją przeciwnicy biegle posługujący się jakimkolwiek językiem, co w rzeczywistości jest przeszkodą, jeśli twoi programiści nie są.
Właściwie, gdyby ktoś mógł zdekodować surowy strumień danych, mając je w języku innym niż angielski, na którym opiera się większość języków programowania, łatwiej byłoby wybrać zmienne.
@Jon Bentley zgodził się: Dla większości oportunistyczni napastnicy są znacznie bardziej prawdopodobnym problemem niż ci oddani - a oportunistów można powstrzymać, będąc nieodpowiednimi.
@MaxBarraclough: "Tego rodzaju niejasność utrudni innym dostrzeżenie słabych punktów w systemie, prawda?"- że, podobnie jak dwa ostatnie punkty zawarte w odpowiedzi, w dużej mierze zależą od tego, czy „inni”, którzy najprawdopodobniej zobaczą, skontrolują lub utrzymają kod, biegle posługują się używanym językiem, a nie angielskim.
@JonBentley, `To powszechne błędne przekonanie, że bezpieczeństwo poprzez zaciemnienie jest„ złym pomysłem ”per se, ale nie jest to poprawne.- Tak, cóż, wiesz, to tak jak twoja opinia, stary!- Koleś.
Cóż, prawdopodobnie bezpieczeństwo poprzez zaciemnienie jest czasami jedynym sposobem, spójrz na wszystkie DRM.W takich przypadkach może być dość skuteczny, ale należy go unikać, gdy jest to możliwe.I w takiej sytuacji może tak być.Ponownie, prawie wszystkie DRM są prędzej czy później zepsute, jeśli istnieje wystarczające zainteresowanie ich złamaniem.
+1 za problem z konserwacją.* Może * to nieco zmylić potencjalnych hakerów;* spowoduje * to, że za pięć lat irytowany opiekun kodu będzie chciał cię dopaść i rzucić na kolana łyżką do opon.Może nawet ty jesteś wściekłym opiekunem.
@JonBentley ** Dokładnie demonstrujesz, dlaczego zabezpieczenia przez zaciemnienie są __ złe. ** Uruchamianie SSH na porcie innym niż domyślny może faktycznie _aktywnie obniżyć poziom bezpieczeństwa_, jeśli działa on na wysokim porcie (co wydaje się robić większość ludzi).Twoje twierdzenie, że jest w najgorszym razie bezużyteczne, jest po prostu błędne.
@forest 1. Mówiłem, że ** często ** jest to w najgorszym przypadku bezużyteczne, nie zawsze.Oczywiście każdy przypadek musi być rozstrzygnięty indywidualnie.2. Twój kontrprzykład pokazuje, że wdrożenie czegoś ** naiwnie lub niepoprawnie ** jest złe, a nie, że bezpieczeństwo poprzez zaciemnienie ** per se ** jest złe.Ta sama zasada dotyczy również standardowych środków bezpieczeństwa.Wiele systemów zezwala na niezwykle powszechne lub łatwo wymuszone hasła.To nie sprawia, że hasła są złym pomysłem.
@JonBentley Security dzięki niejasności zwiększa szanse na zrobienie czegoś nieprawidłowo.Oczywiście sama wiedza atakującego na temat algorytmu lub systemu nie poprawia i nie może poprawić bezpieczeństwa, ale to nie znaczy, że próba aktywnego zapobieżenia jej zdobyciu nie wiąże się z wysokim ryzykiem pogorszenia sytuacji.
Nie mogę z czystym sumieniem głosować za tym, o ile zaczyna się od „technicznie nieznacznie tak”.Ponieważ to po prostu nieprawda.
@jpmc26 Chociaż odradzam robienie tego, trudno zaprzeczyć, że przyniosłoby to jakąś korzyść.Chociaż nie robi nic przeciwko zdeterminowanemu napastnikowi, większość napastników jest oportunistycznych.Jeśli jedna witryna jest trudniejsza do zhakowania z powodu innego języka niż podobna inna witryna, mogą wybrać inną.Większość wad, które wymieniłem, jest nieco sytuacyjna / można ich uniknąć.Więc daje bardzo małą korzyść, jeśli potrafią poradzić sobie z wadami.Skłamałbym, gdybym próbował temu zaprzeczyć.
@PeterHarmann Czy oportunistyczni atakujący będą spędzać czas nad niestandardową aplikacją internetową, która wymaga przede wszystkim kodu?Jeśli interfejs użytkownika jest w języku atakującego (lub takim, w którym biegle posługuje się nim), nie może być bardzo trudno dowiedzieć się, co jest związane z informacjami, których szuka, a co nie.Po prostu nie widzę żadnych dowodów na to, że jest jakaś rzeczywista poprawa, nawet w stosunku do oportunistycznych napastników.
@jpmc26 Wall, dlatego zawsze podkreślam małe, małe, nie warto i tak dalej.Oczywiście nie odstraszy to zdecydowanie każdego oportunistycznego napastnika, w przeciwnym razie może być tego warte.O tym, że może kogoś odstraszyć, to tylko moje wyuczone przypuszczenie, że może być ktoś, kto z tego powodu teoretycznie się poddaje, chociaż oczywiście nie ma na to odpowiednich dowodów.
@Shadur: "to * sprawi *, że za pięć lat zdenerwowany opiekun kodu będzie chciał cię dopaść i rzucić na kolana łyżką do opon" - to jest okropnie anglocentryczny punkt widzenia.
Wybrałem to jako odpowiedź, ponieważ podsumowuje większość omawianych tutaj punktów, ale naprawdę podobał mi się ten, którego nie ma na tej liście, o tym, że system musi być bezpieczny, nawet jeśli atakujący wie o tym wszystko.
forest
2018-05-01 11:05:44 UTC
view on stackexchange narkive permalink

Nie byłoby to znacznie bezpieczniejsze. Inżynierowie odwrotni są często zmuszani do pracy z systemami, które nie mają nienaruszonych żadnych oryginalnych nazw (oprogramowanie produkcyjne często usuwa nazwy symboli), więc przyzwyczajają się do pracy z nazwami wygenerowanymi przez komputer. Przykład zaczerpnięty z Wikipedii, fragmentu dekompilowanego kodu C, który jest często widywany:

  struct T1 * ebx; struct T1 {int v0004; int v0008; int v000C;}; ebx->v000C - = ebx->v0004 + ebx->v0008;  

Ludzie, którzy są przyzwyczajeni do pracy z tego rodzaju reprezentacją, nie dają się zwieść używaniu zmiennych i tym podobnych którym nadano nieistotne nazwy. To nie jest specyficzne dla skompilowanego kodu , a użycie języka C było tylko przykładem. Inżynierowie odwrotni są ogólnie przyzwyczajeni do zrozumienia kodu, który nie jest intuicyjny. Nie ma znaczenia, czy używasz JavaScript, czy Java, czy C. Nie ma nawet znaczenia, czy analizują one tylko komunikację z samym API. Inżynierowie odwrotni nie dadzą się zwieść używaniu losowych lub nieistotnych nazw zmiennych lub funkcji.

Matthew
2018-04-30 19:03:10 UTC
view on stackexchange narkive permalink

Niezupełnie - wszystkie funkcje wbudowane nadal będą w języku angielskim, więc ustalenie, co będą reprezentować zmienne, nie wymagałoby większego wysiłku. Może to trochę spowolnić, ale biorąc pod uwagę, że ludziom nadal udaje się odtworzyć kod z pojedynczymi zmiennymi znakowymi w każdym miejscu lub który został przepuszczony przez obfuskatory, zamiana języka używanego dla zmiennych i funkcji oznacza po prostu wykonanie operacji znajdź-zamień kiedy już zorientujesz się, do czego służy jedna z twoich zmiennych, powtarzaj, aż będziesz wystarczająco rozumieć

Aby dodać, ludzie mogą odtworzyć kod z kodu maszynowego.Ludzie zorientowali się, jak hakować skomplikowane gry, po prostu patrząc, jak zmienia się ich pamięć podczas wykonywania czynności.I to bez tego, jak front-end sieci zmusza cię do podania rzeczywistego kodu źródłowego (nawet zminimalizowanego, to jest znacznie wyższy poziom, a zatem wzorce są bardziej widoczne).Istnieją również narzędzia zapobiegające zaciemnianiu, które próbują nieco cofnąć niektóre z trudniejszych technik zaciemniania (i oczywiście pomagają również elementy formatujące kod).
Chociaż jest to poprawne w przypadku Java / JavaScript, istnieją również języki programowania, które używają języka innego niż angielski dla swoich wbudowanych funkcji.Chociaż niejasność tych języków może być bardziej istotna dla bezpieczeństwa niż ich nazwy funkcji.
Nie chodzi tylko o inżynierię wsteczną gier na podstawie analizy środowiska uruchomieniowego, ale nawet tworzenie całkowicie działającego kodu źródłowego, który kompiluje się do dokładnie równoważnego kodu bajtowego, zamieniając grę o zamkniętym źródle w grę wieloplatformową!
Tom
2018-05-01 00:11:16 UTC
view on stackexchange narkive permalink

To jest ochrona poprzez zaciemnienie i opóźni dedykowanego atakującego o całe pięć minut.

Jeśli chcesz zmylić atakującego, nazwanie rzeczy ich przeciwieństwem lub czymś niezwiązanym miałoby ten sam skutek. Twoja funkcja „Utwórz użytkownika” mogłaby więc nazywać się „BakeCake”. Teraz możesz sobie odpowiedzieć, ile daje Ci to bezpieczeństwa. Właściwie byłoby to bezpieczniejsze , ponieważ nie można go pokonać za pomocą zwykłego słownika.

Tak, na początku mogłoby to zmylić, ale jedno spojrzenie na system w działanie i wszystko staje się natychmiast krystalicznie jasne.

Nie byłoby to bezpieczniejsze, zwłaszcza, że inżynierowie wsteczni (na przykład) często nie mają nawet oryginalnych nazw symboli, z którymi mogliby pracować, więc _już_ są przyzwyczajeni do pracy z całkowicie wymyślonymi nazwami lub identyfikatorami.
Mowa o REST, czyli aplikacji webowej.Osoba atakująca jest znacznie bardziej skłonna do analizowania interakcji w sieci WWW niż kod bajtowy Java.
Chodzi mi o to, że inżynierowie odwrotni są już przyzwyczajeni do tego typu rzeczy, nawet jeśli nie dokonują faktycznej dekompilacji.Napisałem odpowiedź na ten temat, wykorzystując inżynierię odwrotną w języku C jako przykład.
Nazywanie rzeczy na podstawie ich przeciwieństw z większym prawdopodobieństwem wprowadziłoby błędy niż nazewnictwo w języku obcym.„A potem nazywamy„ create_user ”i… Czekaj, dlaczego ciągle mówi„ konto nie istnieje ”? Oczywiście, że nie istnieje - dlatego próbuję je utworzyć!”Ale +1 za bardziej ogólny punkt.
Oczywiście to głupi pomysł i nie polecam go.Ale z punktu widzenia czysto bezpieczeństwa byłoby to bezpieczniejsze.:-) (nie każdy bezpieczny pomysł jest dobrym pomysłem)
Ángel
2018-05-02 02:15:39 UTC
view on stackexchange narkive permalink

Twój system MUSI być sam w sobie bezpieczny. Jeśli polega na tym, że javascript po stronie użytkownika przekazuje parametr z wartością „open sesame”, robisz to źle.

Powinieneś napisać program w języku, który jest dla Ciebie wygodniejszy (np. od biegłości programisty, spójności z bazą kodu, a nawet z terminami, których używasz).

Inne odpowiedzi wskazywały już, że tak naprawdę nie zapewnia to bezpieczeństwa. Jeśli chcesz stworzyć bezpieczny program, zamiast martwić się o to, że potencjalni hakerzy będą mogli łatwo odczytać Twój kod i poznać tajną dziurę, prawdopodobnie powinieneś bardziej zadbać o to, aby był czytelny dla osób dokonujących audytu .

Jeśli istnieje parametr funkcji o nazwie nonce i komentarz mówiący o tym, w jaki sposób zapewniamy, że jest on unikalny w żądaniach, ale nie jest wysyłany w żądaniu, możesz być całkiem pewien, że to pomyłka. Faktycznie, posiadanie łatwego do odczytania kodu zmniejszy szanse na upuszczenie / opróżnienie tego parametru (w końcu wszystko działało bez niego...), a jeśli tak się naprawdę stanie, ułatwi to innym programiści zauważają problem.

(Osoby trzecie też mogą Cię o tym poinformować. Prawdopodobnie więcej osób przyjrzy mu się przypadkowo niż tych, którzy faktycznie próbują go rozwiązać. Losowy napastnik najprawdopodobniej zacznij od uruchomienia zautomatyzowanego narzędzia i miej nadzieję, że cokolwiek znajdzie.)

TL; DR: stwórz czytelny kod. Dla ludzi, którzy powinni się tym zająć. W razie wątpliwości powinieneś wybrać ten, o którym większość ludzi wie.

Jasne, nigdy nie zamierzałem używać języka jako środka bezpieczeństwa.Po prostu ciekawiły mnie przemyślenia społeczności w tej sprawie.
To.Albo twoja aplikacja jest bezpieczna, albo nie.Język używany do nazewnictwa parametrów nie ma żadnego wpływu na zwiększenie bezpieczeństwa.
Chris H
2018-05-01 19:08:36 UTC
view on stackexchange narkive permalink

Może to nawet pogorszyć sytuację, utrudniając konserwację systemu.

Weź skrajny przykład inspirowany historią i komunikuj się między frontem a zapleczem w Navajo. Kiedy (nie jeśli) musisz załatać kod, musisz albo:

  • pracować z tym, co dla ciebie jest nonsensem (z dodatkową szansą na błędy / literówki plus praca na nie -intuicyjny kod) lub
  • zatrudnij / utrzymuj programistów biegle w Navajo (rzadka i potencjalnie kosztowna kombinacja umiejętności, prawdopodobnie niemożliwa do znalezienia wykonawcy)
Twoje porównanie ma poważne problemy.Navajo był niezwykle rzadki i nie był językiem pisanym.OP może po prostu pytać o wspólny język w jego / jej lokalizacji geograficznej (tj. Mówi nim dostępna pula talentów deweloperów).Tłumaczenia można również zachować po stronie deweloperskiej.
@schroeder Mój wybór języka mówionego był być może słaby, ale aspekt historyczny stworzył interesującą analogię.Uważnie przeczytałem pytanie, aby znaleźć jakąkolwiek wskazówkę dotyczącą języka programistów, ale nawet wtedy istnieją poważne aspekty biznesowe dotyczące przyszłego outsourcingu, a nawet in-sourcingu.na przykładweź stereotypowy przypadek outsourcingu do Indii i użyj języka hindi.Następnie, gdy szefowie zdecydują się przeprowadzić konserwację w domu z powodów politycznych, musisz znaleźć biegłych programistów.Powiedziałem, że to ekstremalne, żeby zwrócić uwagę
Paddy
2018-05-01 17:56:41 UTC
view on stackexchange narkive permalink

Chciałbym również zauważyć, że w większości przypadków javascript po stronie klienta skrypt w takiej postaci, w jakiej został opracowany (ze znaczącymi nazwami zmiennych itp.) byłby „zminimalizowany” w celu zwiększenia wydajności na kliencie (mniejszy rozmiar pliku do pobrania).

W ramach tego większość nazw zmiennych jest zredukowanych do pojedynczych znaków, a jak najwięcej białych znaków jest usuwanych. Staje się to tak samo nieczytelne, jak cokolwiek innego, co możesz napisać.

Chciałbym również zauważyć, że chrome (na przykład) ma metody, które pobierają plik „mniej czytelny dla człowieka” taki jak ten i „ładnie go drukują”, co znacznie ułatwia zrozumienie, co się dzieje.

Krótko mówiąc, ludzki język, którego używasz do pisania kodu po stronie klienta, naprawdę nie robi dużej różnicy.

Gaius
2018-05-04 02:36:22 UTC
view on stackexchange narkive permalink

Jeśli wierzyć środkom masowego przekazu, to większość hakerów to Rosjanie, Chińczycy i Koreańczycy z północy, więc już działają na „przeszkodzie” związanej z koniecznością hakowania zachodnich systemów w język obcy. Dlatego jeśli nie wybierzesz czegoś niesamowicie niejasnego, jak w filmie Windtalkers , nie zrobi to dla nich żadnej różnicy. Jednak dodatkowy wysiłek oznacza mniej czasu na znajdowanie i naprawianie błędów, więc jeśli już, ta strategia zmniejszyłaby Twoje bezpieczeństwo .

Julie in Austin
2018-05-04 02:47:01 UTC
view on stackexchange narkive permalink

W kilku odpowiedziach (słusznie) wskazano, że jest to „bezpieczeństwo przez zaciemnienie”, które w rzeczywistości nie jest formą bezpieczeństwa. Najbezpieczniej jest założyć, że atakujący ma w pełni opatrzony adnotacjami kod źródłowy, który siedzi przed nim podczas zajętego ataku.

Oprogramowanie jest „bezpieczne”, gdy zna wszystko, co można wiedzieć przed żądaniem / transakcją / sesja jest publicznie znana ORAZ nie ma to wpływu na faktyczne bezpieczeństwo produktu.

Należy założyć, że kod źródłowy jest powszechnie znany, choćby dlatego, że niezadowoleni pracownicy nie są brani wycofać się i strzelić, gdy zostaną zakończeni. Lub, jak się często mawia, „Jedynym sposobem, aby dwoje ludzi zachowało tajemnicę, jest śmierć jednej z nich”. Zatem każda „wiedza specjalna”, która jest ukrywana przez jakiekolwiek zaciemnianie, musi być traktowana jako „wiedza ogólna”, gdy tylko zostanie wytworzona.

W istocie bezpieczeństwo jest niczym innym jak „ mówiąc, co robisz, i robiąc to, co mówisz ”. Analiza bezpieczeństwa - audyt kodu i schematy oceny formalnej, takie jak przeprowadzane w ramach Common Criteria - wymaga, aby mechanizmy wykonywania akcji były dobrze udokumentowane i aby wszystkie przejścia z jednego bezpiecznego stanu do drugiego bezpiecznego stanu były możliwe tylko wtedy, gdy wszystkie wymagania zadowoleni. Jednym z zagrożeń związanych z wszelkiego rodzaju zaciemnianiem jest to, że te wymagania są zasłonięte przez sprytne kodowanie - zobacz przykład niepowodzenia funkcji „create_user ()”, ponieważ jest to „potajemnie” metoda „usuń użytkownika”, „zmień nazwę użytkownika” lub inna metoda. Aby zobaczyć rzeczywisty przykład tego, jak trudna jest zmiana nazwy w mózgu, dostępne są testy on-line, w których należy odczytać nazwę koloru, która jest drukowana na ekranie w innym kolorze. Na przykład słowo „CZERWONY” zapisane niebieską czcionką spowoduje, że pewna liczba osób powie „NIEBIESKI” zamiast „CZERWONY”.

JoaoBotelho
2018-05-01 10:15:33 UTC
view on stackexchange narkive permalink

To może być nieistotne. Rozważ scenariusz, w którym piszesz (np. Po włosku zamiast po angielsku), ale większość Twoich klientów jest we Włoszech, naturalnie włoskojęzyczni hakerzy mają wyższą motywację / korzyści z zaatakowania Cię.

W tym W scenariuszu kodowanie w innym języku nie przynosi żadnego efektu lub może nawet ułatwić hakowanie.

To tylko prawnicze zasady.Schemat byłby tak oczywisty bezcelowy, gdyby wybrany język był językiem używanym przez większość użytkowników, że możemy być pewni, że pytający chciał to wykluczyć.
Tak, ale przypuszczalnie nie ma wielu scenariuszy, w których zespół programistów może zawsze znać ten sam język inny niż angielski, a społeczność korzystająca z aplikacji nie zna tego języka.
W rzeczywistości istnieje wiele dwujęzycznych społeczności i rynków.Wielu programistów na rynek włoski jest w Albanii, więc mogą tworzyć oprogramowanie w innym języku.To samo dotyczy programowania w języku hinduskim dla aplikacji anglojęzycznych, itp. Jedyne, co chciałem podkreślić, to to, że język użytkowników / celów będzie miał wpływ na to, ile „bezpieczeństwa” może zapewnić ten czynnik.


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...