Pytanie:
Skąd mam wiedzieć, że oprogramowanie robi tylko to, co twierdzi autor?
user3533
2013-02-07 03:08:39 UTC
view on stackexchange narkive permalink

Nie będąc programistą ani ekspertem komputerowym, skąd mogę wiedzieć, czy konkretny program lub ogólnie jakiekolwiek oprogramowanie nie ma ukrytych niepożądanych funkcji zagrażających prywatności i bezpieczeństwu?

Wiele komentarzy jest słusznych. Dodatkowo, jeśli oprogramowanie działa na maszynie * nix lub bsd, możesz śledzić oprogramowanie i obserwować funkcjonalność niskiego poziomu (tj. Jakie wywołuje system).
Gdybyś był ekspertem od programowania, mógłbyś skorzystać z analizy statycznej. Zasadniczo zdekompiluj program za pomocą IDAPro i zobacz mapę wszystkich api systemowych nazywanych aka tymi, które mogą wyrządzić szkody. Poza tym możesz sprawdzić, czy aplikacja otwiera porty, które powinna, lub wykonuje połączenia telefoniczne do domu za pomocą zapory.
Jeśli określone oprogramowanie twierdzi, że nic nie robi, problem jest łatwy.
@emory, warto więc sprawdzić NaDa: http://www.bernardbelanger.com/computing/NaDa/index.php
Ogólnie rzecz biorąc, nie możesz wiedzieć, że oprogramowanie robi tylko to, co twierdzi autor. Jednak odpowiadając na Twoje konkretne pytanie: skąd mam wiedzieć, czy dany program ma ukryte niechciane funkcje zagrażające prywatności i bezpieczeństwu? Zainstaluj to oprogramowanie na komputerze, który jest całkowicie niepodłączony - bez internetu, Wi-Fi, LAN itp. Używaj tego komputera tylko do uruchamiania tego programu. Jeśli istnieją jakieś ukryte niechciane funkcje próbujące naruszyć prywatność i bezpieczeństwo, zawiodą.
Ta obawa jest jednym z powodów, dla których niektórzy ludzie wybierają oprogramowanie Open Source. Jeśli ktokolwiek może odczytać kod źródłowy, masz znacznie większą szansę, aby dowiedzieć się, czy program robi coś niewłaściwego.
Przy okazji, ktoś pamięta te prawdziwe "wirusy" komputerowe z czasów przed internetem? - Zmieniali pliki wykonywalne znalezione na komputerze ofiary, wstrzykując do nich własny kod. Jest to kolejny przypadek, w którym nikt nie może twierdzić o zachowaniu programów, nawet jeśli zostały one czysto zbudowane z zaufanego kodu źródłowego.
Siedem odpowiedzi:
Tom Leek
2013-02-07 03:39:59 UTC
view on stackexchange narkive permalink

Możesz wiedzieć, czy niektóre programy robią tylko to, co ogłaszają, w ten sam sposób, w jaki możesz wiedzieć, czy jedzenie podawane w restauracjach jest zatrute, czy nie. Mówiąc prościej, nie możesz, ale społeczeństwo wymyśliło różne sposoby radzenia sobie z problemem:

  • Możesz posłuchać przyjaciół i krytyków, aby dowiedzieć się, czy jedzenie w danej restauracji cieszy się dobrą opinią lub nie.
  • Możesz pobrać próbkę i wysłać ją do laboratorium, które będzie szukać wielu (ale nie wszystkich) znanych trujących substancji.
  • Możesz ładnie zapytać, czy możesz obserwować kucharz podczas przygotowywania potraw.
  • Kucharz ma żywotny interes biznesowy w tym, aby jego klient był zadowolony z jakości żywności, a szczęście obejmuje w szczególności brak śmierci.
  • Społeczeństwo karze trucicieli z najwyższą surowością i zwykle można założyć, że kucharz o tym wie.
  • Zawsze masz skrajną opcję nie jeść tam, jeśli zbytnio się martwisz.

Wszystko to można bezpośrednio przenieść do świata oprogramowania. Ekstremalne metody określania jakości oprogramowania i przestrzegania jego opublikowanego zachowania obejmują bardzo drogie i nudne rzeczy, takie jak Common Criteria, które sprowadzają się do wiedzy, kto stworzył program i za pomocą jakich narzędzi.

Alternatywna odpowiedź: każde oprogramowanie ma błędy, więc jest 100% gwarancja, że ​​ nie robi dokładnie to, co powinno. (Nawiasem mówiąc, to stwierdzenie obejmuje oprogramowanie działające na kilkunastu małych komputerach wbudowanych w Twój samochód).

Jedna z najlepszych analogii w historii
Dobre. Alternatywna odpowiedź jest również znakomita.
Jedna uwaga: restauracja jest dość znana i ugruntowana, podczas gdy osoba, która tworzy oprogramowanie, może nie być. Niektóre anonimowe osoby mogą nie zostać ukarane, jeśli oprogramowanie jest złe, ani nie musisz znać ich reputacji. Jeśli wiesz, kto faktycznie stworzył oprogramowanie i ma on dobrą reputację do utrzymania, _ wtedy_ analogia działa lepiej.
Analogia obejmuje również to dobrze, @cpast. Jedz bezpieczniej w znanej, dobrze ocenianej restauracji niż kupując sushi od ulicznego sprzedawcy, który może po prostu zniknąć po przypadkowej sprzedaży złej ryby.
Są też takie rzeczy jak specyfikacja formalna (możesz przeczytać specyfikację, jeśli znasz język specyfikacji) i sprawdzić, czy fragment SW jest z nią zgodny.
Możesz również poprosić o przepis lub sprawdzić go i przygotować jedzenie samodzielnie w domu.
Możesz też poprosić o składniki i ugotować je samodzielnie (pobierz kod źródłowy i skompiluj).
To typowa odpowiedź na tego rodzaju pytanie. To nie do końca prawda. Kod! = Jedzenie, ponieważ projektant języka wybiera reguły wszechświata. Wymyślony przykład: używając czystego języka funkcjonalnego, wiem już na 100%, że żadna funkcja nie może powodować skutków ubocznych poza wykorzystaniem przestrzeni / czasu. „każde oprogramowanie ma błędy” jest fałszem; funkcja tożsamości `id: a -> a; id x = x` nie zawiera błędów, sam typ jest już dowodem. Wiem też, że funkcja dodawania multi-precyzji w asemblerze x64, którą dziś napisałem, nie ma błędów intuicyjnie - jest oczywiste, że jest poprawna.
Każda analogia załamuje się, gdy przyjrzymy się jej zbyt uważnie. Tak właśnie wyglądają analogie: ilustrują pojęcia, aby ludzki umysł mógł je przetrawić. Jeśli chodzi o twoją funkcję, ponieważ sam sprzęt nie jest wolny od błędów ...
Kod, który napisałem, jest wolny od błędów, niezależnie od tego, czy sprzęt jest wolny od błędów. Bez zakładania niczego nie można „wiedzieć”. Biorąc to pod uwagę, nie kontynuuj i nie ufaj sprzętowi Intel. Także: „Społeczeństwo karze trucicieli z najwyższą surowością i zwykle można założyć, że kucharz o tym wie”. Czy społeczeństwo ukarało Debiana za działanie generatora losowego przez 2 lata (odpowiednik tylnych drzwi)? Nie. Nawet nie stracili swojej wiarygodności.
@Longpoke być może kod, który napisałeś, jest wolny od błędów i być może sprzęt jest wolny od błędów. Czy kompilator i / lub interpreter są wolne od błędów? Bez względu na wykorzystanie przestrzeni / czasu samo w sobie może stanowić problem. Wyobraź sobie, że na komputerze działa (a) system podtrzymywania życia i (b) Twoja funkcja tożsamości. LFS ma jakiś dziwny błąd współbieżności, który nigdy nie pojawiłby się za milion lat, chyba że wymusiło to wykorzystanie przestrzeni / czasu przez funkcje id. Twoja funkcja prawdopodobnie zrobiła coś poza tym, co twierdziłeś.
@emory: Łatwo jest zweryfikować nieoptymalizującą implementację języka FP. Przyczyną błędu współbieżności nie jest „id”, problemem jest to, że w innej części systemu występuje błąd współbieżności. Jeśli zależy Ci na bezpieczeństwie, weryfikujesz całą TCB (co oznacza, że ​​nie możesz użyć szalonego stosu, takiego jak gcc / * nix / x86) i upewniasz się, że nie ma w nim takich błędów współbieżności. To powiedziawszy, jeśli to pytanie dotyczy tylko weryfikacji oprogramowania * nix, odpowiedź jest dość prosta: nie możesz. Każdy, kto mówi inaczej, używa branżowej definicji „bezpiecznego”. Przez * nix mam na myśli BSD, Microsoft, Apple, UNIX itp.
„Kucharz ma żywotny interes biznesowy, aby jego klient nie umarł”. Przysięgam, jeśli kiedykolwiek napiszę podręcznik wprowadzający do ekonomii biznesu (prawdopodobnie nigdy, ale hej), to zdanie tam będzie.
Teraz muszę tylko wymyślić utajoną neurotoksynę, która spowoduje, że osoba, która ją zażywa, na nowo zapisze swoją wolę także przed śmiercią. (Przepraszam, jestem trochę na tripie tylnym wejściem, a tej analogii brakowało;))
David Stratton
2013-02-07 03:35:08 UTC
view on stackexchange narkive permalink

Nie możesz, przynajmniej nie ze stuprocentową dokładnością. Mówiąc jako programista, bardzo łatwo jest kodować cokolwiek chcę i niekoniecznie jest to tylko to, co jest reklamowane.

Jednak nie każda nieoczekiwana aktywność jest złośliwa. Zakładam, że bardziej martwisz się złośliwą aktywnością. Nawet tego nie da się w 100% wykryć przez cały czas, ale jest nadzieja.

Możesz użyć oprogramowania, które monitoruje takie rzeczy, jak ruch sieciowy, aktywność plików itp., Aby znaleźć wskazówki, że oprogramowanie zachowuje się w nieoczekiwany sposób. Na przykład (i wiem, że jest to tylko podstawowe narzędzie) możesz użyć Fiddlera, aby sprawdzić, czy dana aplikacja łączy się z Internetem przez http (s). (Tak, ale wiem, że istnieją lepsze narzędzia. Fiddler jest pierwszym, który przychodzi na myśl). W systemie Windows możesz użyć Monitora procesów, aby uzyskać jeszcze lepszy wgląd. Podobne narzędzia istnieją na innych platformach.

Dostępnych jest również kilka innych usług, które wykonają analizę za Ciebie.

Analiza dynamiczna niczego nie kupi. Tak czy inaczej utkniesz z problemem zatrzymania. Prosta bomba logiczna napisana przez 12-latka zniweczy wszystkie rodzaje analizy dynamicznej, o ile kod jest wystarczająco gęsty.
Jeff Ferland
2013-02-07 03:41:27 UTC
view on stackexchange narkive permalink

Szczególnie, gdy oprogramowanie staje się większe i bardziej skomplikowane, nawet eksperci nie mogą * na to odpowiedzieć. W tym zakresie prywatność i bezpieczeństwo aplikacji najlepiej zapewnić przy użyciu metod piaskownicy lub Obowiązkowej kontroli dostępu. Idea kryjąca się za tymi metodami polega na tym, że oprogramowanie jest uruchamiane w systemie, który kontroluje to, co może zrobić, i pozwalasz mu robić tylko to, czego oczekujesz. Wykonane poprawnie, możesz ograniczyć możliwe połączenia i otrzymać powiadomienie, jeśli program kiedykolwiek spróbuje uzyskać dostęp do plików, których się nie spodziewałeś. Można zastosować bardzo zaawansowane metody do monitorowania pamięci lub odszyfrowywania ruchu sieciowego przez usługę proxy.

Krótko mówiąc, jeśli nie możesz zrozumieć wszystkiego, co robi, odpowiedzią jest ograniczenie wszystkiego, co może zrobić z czymś, co może zrobić działa w (systemie operacyjnym).

Po Twoim „niemożliwe” znajduje się wisząca gwiazdka, ale zgodnie z prawem powinieneś zacytować tutaj Donalda Knutha i MetaPosta.
Wisząca gwiazdka oznacza, że ​​czas nie byłby nieskończony, po prostu cholernie długi.
typowe piaskownice (VM, java itp.) / MAC / ACL / DAC itp. zawiodły. Jedyny znany mi model, który obecnie działa, to model zdolności. Z drugiej strony, jeśli utkniesz przy użyciu * nix, jedynym wyborem są naprawdę rzeczy, o których wspomniałeś.
@Longpoke SELinux kontroluje przynajmniej każde wywołanie systemowe, a zatem obejmuje kontrolę możliwości.
@JeffFerland Nie mówię o możliwościach Linuksa, mówię o modelu możliwości.
Mok-Kong Shen
2013-02-07 19:35:15 UTC
view on stackexchange narkive permalink

W swoim szeroko znanym wykładzie ACM Turing Award „Reflections on Trusting Trust” (teraz prawie dokładnie 30 lat temu!) Ken Thompson powiedział: „Nie możesz ufać kodowi, którego sam nie stworzyłeś”. W praktyce oprogramowanie komercyjne nie jest wyjątkiem od innych produktów komercyjnych, ponieważ te pochodzące od producentów cieszących się dobrą marką na rynku mają zwykle większe prawdopodobieństwo, że będą lepsze. Jednak nie ma na to absolutnej gwarancji. Dziesiątki lat temu dostałem dyskietki od znanego producenta, który miał wirusa. W takim przypadku osobiście uważam, że nie było to złośliwe działanie nikogo w firmie, ale niektóre komputery firmy zostały zainfekowane wirusem z zewnątrz. Jednak ewidentnie nie jest możliwe, aby w 100% wykluczyć możliwość wprowadzenia backdoorów do oprogramowania przez osoby z wewnątrz firmy, niezależnie od tego, czy jest to znane jej prezesowi, czy nie. Backdoory mogą być dla IMHO niezwykle krytycznym problemem, teraz, gdy na świecie zbliżają się wojny cybernetyczne. Tajna agencja rządowa mogłaby mianowicie w jakiś sposób zarządzać (za pośrednictwem pieniędzy, przymusu lub nawet złośliwego oprogramowania), aby takie backdoory zostały wszczepione do określonego oprogramowania, które normalnie służy do zapewnienia bezpieczeństwa komunikacji (np. Tych związanych z podpisami cyfrowymi) i które jest sprzedawane do i wykorzystywane przez pewne nieprzyjazne lub potencjalnie nieprzyjazne zagraniczne narody oraz natychmiast lub w odpowiednich późniejszych punktach czasowych („bomby zegarowe” itp.) wykorzystują tylne drzwi, aby osiągnąć swoje cele polegające na zakłóceniu infrastruktury krytycznej krajów docelowych itp. itp. Stuxnet, Flame i Gauss to kilka nazw, które powinny dać pewne wskazówki co do możliwości potencjalnych malfaiteurs.

Rozszerzając twój punkt widzenia ... Nawet jeśli kompilujesz ze źródła, które sam napisałeś ... Kto może powiedzieć, że kompilator, którego używasz, nie robi czegoś nikczemnego (zakładając, że nie napisałeś kompilatora z assemblera ...)
@Josh: Wszystko zależy od tego, jak wysoka jest Twoja stawka. Nie tylko oprogramowanie użytkowe, ale także kompilatory, system operacyjny i oprogramowanie sprzętowe / sprzęt mogą być potencjalnymi źródłami niebezpieczeństwa. Musisz mądrze zdecydować, jakie środki bezpieczeństwa są konieczne w Twoim przypadku, a które są zbędne (i wziąć odpowiedzialność za zaniedbania). W grudniu 2012 roku odbyła się amerykańska konferencja DAPRA, której celem było znalezienie luk w backdoorach w komercyjnych urządzeniach IT (https://www.fbo.gov/?s=opportunity&mode=form&id=55b80a80971c739699e410584819e767&tab=core&_cview=0). Zobacz w szczególności sekcję „Tło” w pliku PDF, do którego prowadzi łącze.
@Josh - Następnie jest sprzęt. Dlatego przy budowie komputera zacząłem od piasku do produkcji krzemu. Oczywiście, nie ** do końca ** z tym skończyłem ...;)
@NathanLong: Według informacji z normalnych mediów, co najmniej jeden kraj pracuje nad opracowaniem własnych chipów, dążąc w ten sposób do uniezależnienia się od projektów takich jak Intel. Spekuluję jednak, że nie wiem, czy problem z bezpieczeństwem nie mógł ostatecznie być również niewielką motywacją do tego projektu.
F. Hauri
2013-02-07 03:43:46 UTC
view on stackexchange narkive permalink

Niestety nie możesz ...

Ponieważ dobry programista mógłby zostać nazwany przez swoich użytkowników wizardem , dobry trojan całkowicie fałszywe normalne środowisko wyciszające ofiarę.

Niektóre wirusy / trojany oczyszczają system ofiary, aby

  • zapewnić inny wirus nie zepsuje swojej pracy.
  • upewnij się, że antywirus go nie znajdzie.
  • sprawi, że system ofiary będzie działał dobrze, aby ofiara była pewna siebie.

Więc nie możesz !! W razie wątpliwości skonsultuj się !!!!

AJ Henderson
2013-02-07 03:43:59 UTC
view on stackexchange narkive permalink

Ostatecznie wszystko sprowadza się do zaufania. Czy ufasz reputacji firmy wydającej oprogramowanie? Jeśli jest to oprogramowanie typu open source, czy jest używane przez wystarczającą liczbę programistów, aby podnosili flagi, gdyby wystąpiły problemy. W liczbach jest pewna siła, ponieważ w przypadku powszechnie używanego produktu istnieje większe prawdopodobieństwo przeprowadzenia szeroko zakrojonych badań, czy jest on godny zaufania. O ile nie jesteś bardzo paranoikiem, najlepszym rozwiązaniem jest przyjrzenie się temu, co społeczność ma do powiedzenia na temat określonego oprogramowania, ale zawsze będą występować błędy i zawsze będą błędy.

Należy zwrócić uwagę na to, co jest często pomijane w przypadku oprogramowania typu open source: nie ma środków technicznych, które gwarantowałyby, że jakiś binarny / skompilowany program został zbudowany dokładnie z kodu źródłowego, z którego według niego został zbudowany.
@HannoBinder - prawda, chociaż masz również możliwość zbudowania własnej wersji i chociaż nie jest to proste, jeśli dobrze zrobione, powinno być wykonalne dla ograniczonego użytkownika technicznego.
Tim X
2013-02-08 03:36:01 UTC
view on stackexchange narkive permalink

Jak podkreślali inni, nie ma gwarantowanego sposobu, aby się dowiedzieć. W większości przypadków trzeba ufać uczciwości i reputacji dostawcy. Przestrzeganie bezpiecznych praktyk, takich jak instalowanie oprogramowania wyłącznie ze źródeł, którym ufasz, może pomóc, ale tak jak w prawdziwym życiu, czasami ufamy niewłaściwym osobom.

W końcu myślę, że powinniśmy przyjąć pewien poziom paranoi. Jeśli zainstalujesz aplikację na telefonie, nie akceptuj ani nie mów tak, gdy system operacyjny telefonu informuje, że telefon chce uzyskać dostęp do Twoich prywatnych informacji, Twojej lokalizacji itp. Zadaj sobie pytanie, dlaczego potrzebuje tego dostępu. Jeśli uważasz, że dostęp, o który prosi aplikacja, jest uzasadniony na podstawie tego, czego od niej oczekujesz, powiedz tak, może OK. Z drugiej strony, jeśli wydaje się, że domaga się dostępu do informacji lub usług, które są daleko poza tym, czego powinien potrzebować lub którymi być zainteresowany, bądź trochę podejrzliwy i uważnie uważaj, zanim powiesz tak.



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