Pytanie:
Czy powinniśmy chronić kod źródłowy aplikacji sieci Web przed kradzieżą przez hosty internetowe poprzez zaciemnianie?
Rajat Gupta
2013-08-05 19:20:47 UTC
view on stackexchange narkive permalink

Czy warto zaciemniać kod źródłowy aplikacji internetowej w języku Java, aby usługodawca hostingowy nie mógł niewłaściwie go wykorzystać, a nawet ukraść Twojej firmy? Jeśli tak, jak należy sobie z tym radzić? Jak mamy zaciemniać?

Jesteśmy nowym start-upem wprowadzającym produkt na rynek. Jak możemy chronić kod źródłowy naszego produktu / aplikacji internetowej?

Do tego służy w pełni homomorficzne szyfrowanie.
jeśli bezpieczeństwo jest tak ważne, hosting własnego serwera jest opcją, czy nie?
* Może * (BIG może) mieć sens zakładać, że host sieciowy jest złośliwy, ale złośliwy host stwarza również szereg innych problemów. Jeśli poważnie myślisz o tym, że nie ufasz gospodarzowi, musisz również zająć się nimi wszystkimi, a wtedy staje się to raczej niepraktyczne.
tak… to prawda… czy więc często jest to kwestia zaufania? Czy wszyscy inni nie obawiają się, że może się to przydarzyć? Co zazwyczaj robią inni, aby temu zapobiec?
Jeśli pozwolisz komuś na dostęp do kodu binarnego, nie możesz być pewien, że nie zostanie on odtworzony. To takie proste.
Jeśli możesz ukraść cały swój „produkt” przez Internet, to i tak Twój startup będzie krótkotrwały. Wartością startupu jest udowodnienie dobrego pomysłu, zdobycie poparcia użytkowników i ustanowienie ludzi, którzy za tym stoją, jako ekspertów od bardzo konkretnego zadania. Większość ludzi, którzy by Cię kupili, mogłaby napisać własną „Aplikację X”, ale nieoczywiste części, ludzie i pomysł są tym, co kupują.
Jeśli tak bardzo nie ufasz dostawcy usług hostingowych, być może lepszą alternatywą byłoby samodzielne hostowanie witryny.
To brzmi jak „Nie mogę wam powiedzieć swojego pomysłu, ale jest niesamowity - czy napiszecie dla mnie aplikację?” Pomysł, że gospodarz zajrzy do Twojej witryny i powie „ukradnijmy ten niesamowity pomysł i kod - zamknij tę firmę hostingową i walcz z pozwem” jest śmieszny.
Piętnaście odpowiedzi:
Adi
2013-08-05 19:30:35 UTC
view on stackexchange narkive permalink

Złośliwy dostawca usług hostingowych może zrobić dużo więcej niż tylko ukraść Twój kod. Mogą go zmodyfikować, aby wprowadzić backdoory, mogą ukraść dane Twoich klientów i zrujnować cały Twój biznes. Między tobą a hostem musi istnieć zaufanie.

Informacje o kodzie źródłowym. Jeśli osoba atakująca próbuje uzyskać dostęp do Twojego kodu źródłowego, uzyska dostęp do Twojego kodu źródłowego, zaciemnionego lub nie, skompilowanego lub zinterpretowanego.

Jest / em> wartość w zaciemnianiu kodu, ponieważ prawdopodobnie sprawisz, że będzie on tylko trochę trudniejszy do uzyskania przez okazjonalnego oportunistycznego atakującego. Ale jeśli Twój host chce cię dopaść, dopadną cię.

Rozwiązanie? Prawo. Podpisz z nimi umowę i zaakceptuj jakąś formę NDA.

-1
Ogólnie - jeśli jest to większy problem dla Twojego dostawcy usług hostingowych, pojawiło się słowo, że ukradli Twoje rzeczy, w porównaniu z tym, co mogliby zyskać, możesz im łatwo zaufać. Na przykład Amazon Web Services zostałby zrobiony bardzo szybko, gdyby ktoś udowodnił, że ukradł część ich kodu źródłowego, więc ufam, że tego nie robi.
Jedyna rzecz, z którą bym się nie zgodził, jeśli „zaciemnianie kodu ma jakąś wartość”.
Tom Leek
2013-08-05 19:28:58 UTC
view on stackexchange narkive permalink

Cóż, wymaga to trzech komentarzy:

  • Nie można chronić tajemnic za pomocą zaciemniania kodu. Nie naprawdę . Maskowanie kodu w jakiś sposób działa przeciwko niemotywowanym napastnikom, ale nie jest mocne. Jeśli przebicie się przez to ma wartość komercyjną, tak się stanie.

  • Jeśli nie ufasz swojej usłudze hostingowej, poszukaj innej usługi hostingowej. Jeśli tajność twojego kodu jest ważna i warta więcej niż kilkaset dolarów, powinieneś użyć własnego sprzętu: wynajmujesz wydzieloną przestrzeń wnęki z zamkami i osłonami i uruchamiasz w niej własną maszynę.

  • Twój kod istnieje jako skompilowany (bajtowy) kod na serwerach, ale także jako kod źródłowy w twoich systemach programistycznych oraz w głowach twoich programistów. Nie może być tym tajemnicą. Jak mówią, milion dolarów zawsze wystarczy, aby odkryć sekrety, choćby przez przekupienie jednej z osób, które zostały ujawnione.

    (W tym ostatnim przypadku może to być twój plan: ty możesz chcieć, aby jakiś większy konkurent po prostu Cię wykupił.)

Ochrona przed inżynierią wsteczną i kradzieżą Twojej własności intelektualnej jest zwykle zapewniana za pomocą środków prawnych, a nie technicznych.

„środki prawne”… czy muszę zawrzeć jakąkolwiek umowę z usługodawcą hostingowym przed hostingiem lub w przypadku, gdy niewłaściwie wykorzysta mój kod?
„Środki prawne” obejmują prawa autorskie, umowę o zachowaniu poufności, patenty… cała broń prawników. Ostatecznie jest to kwestia względnych kosztów: napastnicy wybiorą najtańsze rozwiązanie, czy to kupują Twój start-up, czy wykonują szpiegostwo i inżynierię wsteczną, z ryzykiem odwetu prawnego. Spraw, aby Twoja sprawa była silna, a okres próbny stanie się potencjalnie zbyt drogi, co skłoni twoich wrogów do wybrania legalnej drogi, znanej również jako „upuszczenie wielu dolarów na kolana” (miejmy nadzieję).
Xander
2013-08-05 19:29:49 UTC
view on stackexchange narkive permalink

Nie, to nie jest tego warte. Nikt nie chce ukraść Twojego kodu. Tysiąc milionów produktów SaaS zostało uruchomionych przez osoby i firmy korzystające z hostingu stron trzecich o takim czy innym opisie i prawie żaden z nich nie okazał się konkurować ze sobą po tym, jak kod ich produktów został skradziony przez hosta.

Więc czy powinieneś zaciemniać swój kod? Jasne, jeśli to sprawi, że poczujesz się lepiej. Żadna krzywda. Czy chronisz swoje IP przed ważnym zagrożeniem? Nie, nie bardzo. To rodzaj kapelusza z folii aluminiowej w wersji dla programistów internetowych.

Cokolwiek robisz, nie trać dużo czasu i energii na myślenie o tym. Podejmij decyzję o zaciemnieniu lub nie, a następnie przejdź do martwienia się o łagodzenie prawdziwych zagrożeń.

- Jasne, jeśli to polepszy twoje stopy. Nic się nie stało. Nie jestem nawet pewien, czy naprawdę nic się nie stało. Przynajmniej jest dodatkowy krok kompilacji, co gorsza, nakłada dużo dodatkowego obciążenia na programistów. A jeśli muszą zdalnie debugować problem? A jeśli są zdalne komunikaty o błędach, czy będą one zawierały rozsądne dane? Czy programiści mogą pracować lokalnie z nie zaciemnionym kodem?
@Dorus Więc tak, to dodaje złożoności, co jest złe. Osobiście nie wybrałbym tego. Jeśli jednak naprawdę nie możesz spać w nocy, ponieważ martwisz się, że bandyci z lepkimi palcami zabijają twoje cenne rzeczy, twierdzę, że jest to opłacalny kompromis. Pracując z (i poddając inżynierii wstecznej) sporo zaciemnionego kodu, rzeczywiście widziałem, że powoduje on niektóre problemy, które wskazałeś (i wprowadził błędy w kilku przypadkach), ale nigdy nie widziałem, aby dodawał ogromnego obciążenia . Podsumowując, nie idealny, ale też nie koniec świata.
@Xander: może wystarczyć, aby uzyskać jakąś konkurencyjną * wadę *, ale chodzi o to, że nigdy tego nie zobaczysz. Głównie jest to kwestia spędzenia czasu na czymś bezużytecznym zamiast pracy nad kolejnymi ulepszeniami witryny lub wolniejszym czasem reakcji na złe wrażenia użytkownika, gdy trzeba naprawić błąd.
@kriss Zgoda, oczywiście, ponieważ nie zaciemniam, kiedy mam wybór. Jednak z mojego doświadczenia wynika, że ​​konfiguracja i radzenie sobie z wszelkimi skutkami zaciemniania zwykle wymagają tylko niewielkiej ilości czasu i wysiłku. Oczywiście wymaga to czasu i wysiłku, który jest marnowany, ale nie marnujesz tak dużo. Każda funkcja, którą można by zamiast tego zbudować, byłaby trywialna.
@Xander - w zasadzie jedna z tych pozycji z listy kontrolnych w audytach, o których wszyscy w dziedzinie bezpieczeństwa wiedzą, że są daremne, ale uwzględniamy ją, aby niewykształcone kierownictwo wiedziało, że wypełniliśmy pole, czy coś robi, czy nie .
@FiascoLabs Dokładnie. To niestety zbyt często się zdarza.
Dan Pichelman
2013-08-05 19:09:34 UTC
view on stackexchange narkive permalink

Ostatecznie jesteś jedyną osobą, która może dokonać oceny ryzyka. Jeśli będziesz spać lepiej, zaciemniając swój kod, zrób to.

Osobiście nie zawracałbym sobie głowy. Renomowane usługi hostingowe działają w branży hostingu, a nie w branży kradzieży kodu źródłowego. Jeśli ukradną Twój kod, nadal będą musieli go zainstalować, sprzedać usługę, znaleźć klientów i odeprzeć pozew, który wytoczysz przeciwko nim. To dla nich zbyt duży wysiłek, zbyt duże ryzyko za zbyt małą nagrodę.

AJ Henderson
2013-08-05 20:00:36 UTC
view on stackexchange narkive permalink

Maskowanie jest nieskuteczne wobec zdeterminowanego napastnika, a jedynie nieco utrudnia. Jeśli masz konkretny powód, aby nie ufać dostawcy usług hostingowych, zdobądź inny.

Jeśli chcesz tylko być bezpieczny, uzyskaj umowę o zachowaniu poufności i inne gwarancje prawne, które pozwolą Ci ścigać gospodarza, jeśli coś nadużywa.

Jeśli nadal nie ufasz im nawet przy tych zapewnieniach prawnych, zdobądź dedykowane serwery, które możesz kontrolować i szyfrować tak, aby dostawca hostingu nie miał dostępu do danych, chyba że włamują się do serwera operacyjnego.

Jeśli martwisz się, że ktoś ma fizyczny dostęp do twoich serwerów, skonfiguruj własne centrum danych lub fizycznie zamknij je w obudowie w kolokowanym obiekcie z monitoringiem fizycznego mienia.

Samo skorzystanie z umowy o zachowaniu poufności powinno wystarczyć z każdym renomowanym dostawcą usług hostingowych.

Bill
2013-08-05 20:23:34 UTC
view on stackexchange narkive permalink

Nie zawracałbym sobie głowy.

Z dwóch powodów:

Języki interpretowane w czasie wykonywania naprawdę nie mogą być w ten sposób w pełni chronione. Aby całkowicie go zaciemnić, musiałbyś go również zaciemnić z poziomu środowiska wykonawczego, wtedy nie byłoby sposobu, aby go wykonać. Zaciemnienie sprawia, że ​​zadanie jest nieco bardziej irytujące. Może również sprawić, że debugowanie i wdrażanie będzie bardziej czasochłonne dla twojego personelu.

Bardzo niewiele aplikacji zawiera rodzaj tajnego kodu sosu, którego ludzie naprawdę zadaliby sobie tyle trudu, aby ukraść. O wiele łatwiej jest po prostu uzyskać listę funkcji i niektórych wykonawców i powiedzieć „zrób coś takiego”, niż kopiować funkcję po funkcji w większości popularnych aplikacji.

tylerl
2013-08-06 06:58:05 UTC
view on stackexchange narkive permalink

Powinieneś podjąć środki ostrożności, aby się chronić, ale nie z powodów lub przed zagrożeniem, które sobie wyobrażasz.

Po pierwsze, jeśli nie możesz zaufać dostawcy usług hostingowych, uzyskać nowego dostawcę usług hostingowych . Nie trzeba już o tym mówić.

Po drugie, nawet jeśli uważasz, że własność intelektualna w zbudowanej przez Ciebie aplikacji internetowej jest cenna, są szanse, że jesteś tylko jeden. Czy ukradłbyś witrynę konkurencji? Prawdopodobnie nie; nie byłoby to warte zachodu. Z reguły ludzie nie są zainteresowani kradzieżą Twojej witryny. Zwykle koszt dostosowania witryny innej osoby do własnych potrzeb jest zbliżony lub przekracza koszt jej samodzielnego zbudowania.

Wreszcie, powinieneś martwić się, że hakerzy pobiorą Twój kod i użyją go do zaatakowania Ciebie. Zapisane hasła, bazy danych użytkowników, błędy programistyczne i luki w zabezpieczeniach - Twój kod prawdopodobnie stanowi atrakcyjny cel dla złośliwych atakujących . Jest to szczególnie ważne, jeśli Twój kod jest źle napisany lub Twoja usługa jest popularna.

Maskowanie kodu nie jest rozwiązaniem i i tak nie pomoże. Ale dobre praktyki bezpieczeństwa, w tym przestrzeganie zasady najniższych przywilejów, powinny ci pomóc. Oddziel swój dostęp, aby narażenie jednego systemu lub komponentu nie zapewniło atakującemu całej aplikacji w zgrabnym małym pakiecie. Im bardziej niezależne i odłączone są elementy Twojej firmy, tym mniej osoba atakująca może złapać za jednym zamachem.

Cyril Joudieh
2013-08-06 12:42:17 UTC
view on stackexchange narkive permalink

Mam wiele aplikacji internetowych hostowanych online. Jakiś kod jest cenny, tak. Jednak nie zaciemniłem żadnego z nich, ponieważ nawet jeśli zostanie skradziony, nikt inny nie może go utrzymać. W końcu wyciągną włosy. Wypróbowałem to z kimś, kto bardzo chciał mojego oprogramowania. Nie mógł go zainstalować, zrozumieć ani nic z tego wyciągnąć, więc w jaki sposób mógłby znaleźć klientów i sprzedawać, jak wspomniano powyżej.

Wartość tkwi w danych i wsparciu, które dajesz i utrzymanie zadowolenia klienta.

Wszystkie moje aplikacje komputerowe mogą zostać zdekompilowane w taki czy inny sposób. Myślę, że VB6 był jedynym, którego nie można było zdekompilować. Nikt nie mógł ich konserwować, ponieważ używam skomplikowanego kodowania i skomplikowanych nazw zmiennych.

user10211
2013-08-05 19:22:51 UTC
view on stackexchange narkive permalink

Próba zaciemnienia kodu po stronie klienta nie ma żadnych zalet w zakresie bezpieczeństwa. Wystarczająco zdeterminowany atakujący będzie ominąć wszelkie metody zaciemniania, które mu rzucisz.

Jeśli kod jest naprawdę ważny, pozostaw go po stronie biznesowej. Rozważ każdy kod po stronie klienta jako publiczny i dostępny dla każdego.

tak, mówię tylko o kodzie po stronie serwera ...
@user01 Jeśli jest to kod po stronie serwera, dlaczego martwisz się, że ludzie go ukradną? Jeśli nie ufasz swojemu usługodawcy hostingowemu, znajdź innego.
nie znasz całkowicie żadnego usługodawcy hostingowego, dopóki nie wyrządzi ci krzywdy.
Philipp
2013-08-05 20:28:14 UTC
view on stackexchange narkive permalink

Jeśli nie ufasz swojemu dostawcy usług hostingowych, że nie wykradnie Twoich danych, powinieneś poszukać bardziej wiarygodnego dostawcy usług hostingowych lub samemu hostować.

Nie powierzasz im tylko kodu programu, powierzasz również wszystkie twoje dane i dane wszystkich twoich użytkowników. Kiedy zakładasz, że Twój dostawca usług hostingowych jest na tyle złośliwy, aby ukraść Twój program, jest on również na tyle złośliwy, aby ukraść Twoje dane użytkownika i sprzedać je licytantowi oferującemu najwyższą cenę. Dane, które prawdopodobnie obiecałeś chronić w ramach polityki prywatności.

Kiedy dojdziesz do wniosku, że nie ufasz żadnemu dostawcy usług hostingowych, ale samodzielny hosting jest zbyt drogi, możesz kupić własny serwer fizyczny i niech ktoś inny go hostuje, ale 1. w pełni zaszyfruj system plików, aby nie mógł klonować dysków twardych podczas konserwacji, i 2. upewnij się, że cała komunikacja sieciowa jest szyfrowana, aby nie mogli podsłuchiwać ruchu.

Daniël W. Crompton
2013-08-06 05:36:40 UTC
view on stackexchange narkive permalink

Świat jest do góry nogami, prawdziwej wartości zwykle nie ma w kodzie aplikacji. To w danych klienta kod jest używany do gromadzenia / modyfikowania. W wielu aplikacjach internetowych kod jest zabezpieczony, a dane są często przechowywane w postaci zwykłego tekstu bez żadnej prostej ochrony. Jest to jeden z problemów, które PCI DSS, HIPAA i inne standardy bezpieczeństwa danych mają rozwiązać.

Zakładając, że Twój dostawca hostingu jest złośliwy, uzyskanie dostępu do danych klientów znacznie szybciej zniszczy Twoją firmę niż zdobycie kodu.

Oprócz kwestii bezpieczeństwa poprzez zaciemnienie, zaciemnianie kodu może również powodować problemy z bezpieczeństwem i będzie musiało zostać sprawdzone na tym samym lub wyższym poziomie, co zwykła baza kodu.

F. Hauri
2013-08-06 21:49:10 UTC
view on stackexchange narkive permalink

Nie

Oczywiście: planujesz zainwestować czas w tak zwaną technologię zabezpieczenia przez zaciemnienie .

To nie jest dobry pomysł!

Aby chronić swój pomysł przed licencjonowaniem przez osoby trzecie, możesz opublikować je na takiej publicznej licencji, jak GNU GPL, creative commons lub inne.

Miałem zamiar poruszyć również tę kwestię i zamieścić na ten temat komiks [_Schlock Mercenary_] (http://www.schlockmercenary.com) w mojej odpowiedzi. Niestety nie mogę znaleźć paska o tym.
Ravi Chandran
2013-08-06 14:30:50 UTC
view on stackexchange narkive permalink

Maskowanie nigdy nie ukrywa ani nie zmienia twojego kodu, po prostu modyfikuje go do innego formatu, w którym może go przetwarzać,

Np .: jeśli chcesz zaciemnić nazwę swojej klasy Moja strona główna, moja strona zostanie zmieniona na M4Page Podobnie jak metoda of addWidgets () zostanie nazwane w innym, a nazwa funkcji może również zostać zmieniona, a nie Functionality Więc jeśli chcę wywołać metodę z twojego zaciemnionego kodu, mogę ją łatwo zaimplementować ...

CyberSkull
2013-08-07 12:39:37 UTC
view on stackexchange narkive permalink

Nie możesz wystarczająco zaciemnić kodu lub danych, aby były bezpieczne. Gdybyś był w stanie, twój kod i dane byłyby bezużyteczne nawet dla ciebie.

Bezpieczeństwo poprzez ukrywanie działa tylko tak długo, jak długo tajemnica twojego zaciemniania pozostaje nienaruszona. Sekrety nigdy nie pozostają tajemnicą. To jest podstawa większości systemów praw cyfrowych i jak dotąd wszystkie z nich zostały złamane.

Z bardziej technicznego punktu widzenia, jeśli używasz języka interpretowanego (Perl, PHP) lub interpretowanego przez kod bajtowy język (Java), rozważ użycie dla nich dołączonych natywnych narzędzi do kompilacji. Wiele takich języków wysokiego poziomu zawiera narzędzie do generowania wersji C / C ++ twoich skryptów lub kompilacji natywnie dla twojego sprzętu. Posiadanie wersji skompilowanej natywnie eliminuje potrzebę utrzymywania drzewa źródeł na zdalnych serwerach, a także zapewnia znaczny wzrost wydajności.

Większość z tych narzędzi w rzeczywistości zapewnia nieco okrojoną maszynę wirtualną z osadzonym kodem bajtowym / drzewem skryptu, a nie w pełni natywny plik binarny.Dzięki temu można je łatwo zdekompilować do znacznie bardziej czytelnej formy niż prosty asembler, więc nie jest dobrym rozwiązaniem zaciemnianie czegokolwiek.Z tego samego powodu tak naprawdę nie zapewniają zwiększenia prędkości w żadnym innym miejscu, z wyjątkiem uruchamiania.
John The Ripper
2013-08-07 19:23:00 UTC
view on stackexchange narkive permalink

Bezpieczeństwo dzięki niejasności nie jest złe, jeśli nie jest to jedyna rzecz, na której możesz polegać. Używanie zaciemniania do ochrony kodu nie zadziała, ale używanie zaciemniania z innymi licencjami nie jest złe.



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