Pokazywanie postów oznaczonych etykietą Hacking. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Hacking. Pokaż wszystkie posty

niedziela, 1 lutego 2015

Weekend z kryptografią (PGP, CryptoCat, encrypted mail storage)

Po zmianie systemów operacyjnych na komputerze prywatnym oraz na smartfonie przyszedł czas na ochronę prywatności w przypadku wysyłania/obierania wiadomości. W ten weekend pod ostrzał poszła komunikacja za pomocą maili oraz próba zabezpieczenia komunikatora, z którego korzystam najczęściej (chat na facebooku).

Najpierw mail. O ile samemu nie posiadamy możliwości postawienia własnego serwera pocztowego, to warto zajrzeć na tą listę hostingów i wybrać coś dla siebie, wg. własnych potrzeb. Celowo nie będę doradzał konkretnego hostingu, ponieważ każdy z nas jest inny i ma nieco inne potrzeby.

Kolejnym etapem, po założeniu skrzynki mailowej, jest zgranie klienta pocztowego thunderbird oraz dogranie do niego rozszerzenia enigmail. Gdy mamy już skrzynkę pocztową, na której maile będą trzymane w sposób zaszyfrowany, klienta mailowego (maili nie czytamy w przeglądarce), oraz zgrany odpowiednie rozszerzenie do obsługi podpisywania/szyfrowania, to pozostało nam jeszcze tylko wygenerować swoją parę kluczy PGP (jak to zrobić opisane jest tutaj) i skonfigurować nasz klucz z klientem enigmail.
Ja dodatkowo, dla wygody zainstalowałem sobie jeszcze KGpg, ale spokojnie można wszystko zrobić z terminala.

Mamy takie coś i.... wuala ;) Nasze maila są zdecydowanie bardziej bezpieczne niż były wcześniej. Teraz tylko pozostaje nam przekonać jak najwięcej naszych znajomych aby również domyślnie szyfrowali swoje maile za pomocą PGP (oraz zweryfikować ich klucze publiczne z fingerprintem jakimś innym kanałem, np. przez tel.) i "jesteśmy w domu" :D Jeśli NSAGCHQ, albo jacyś inni, domorośli hakerzy chcą czytać nasze maile, to niech się przynajmniej nieco wysilą ;)


Kolejny, popularnym kanałem rozmowy, po za mailami, jest chat. W moim przypadku, jest to chat na portalu facebook, który domyślnie nie jest szyfrowany, ale w sposób stosunkowo prosty, sami możemy mu to szyfrowanie zapewnić. Służy do tego darmowe rozszerzenie do przeglądarki o nazwie crypto.cat. Stosunkowo łatwo się to integruje z listą kontaktów na fb, więc jak obie strony używają cryptocata, to na fb wiadomość jest zaszyfrowana.

Na razie crypto.cat posiada pewną wadę, czyli brak przycisku "scroll down" po liście znajomych (można to zrobić tylko za pomocą myszy, która nie zawsze działa), ale jak opisuje to Ryan Hellyer ta niedogodność powinna zostać poprawiona w najbliższej przyszłości.

edit: przydatny link, dla użytkowników firefoxa -> link

sobota, 17 stycznia 2015

CyanogenMod

Ost. czasy zainteresowałem się nieco bardziej szeroko rozumianym "bezpieczeństwem w internecie". Mówiąc "szeroko rozumianym", mam również na myśli ochronę prywatności, włączając w to również ochronę przed programem PRISM. O ile w dzisiejszych czasach całkowite "zniknięcie" jest niemożliwe, o tyle zawsze można próbować chronić swoją prywatność. Szczególnie, gdy po ost. atakach terrorystycznych na gazetę Charlie Hebdo słyszy się głosy polityków chcących wprowadzić pełną inwigilację (oraz cenzurę) internetu uk-spy-agencies-need-more-powers-says-cameron.

W tym miejscu, należy wspomnieć słynny cytat Benjamina Franklina:
"Ci którzy rezygnują z Wolności w imię bezpieczeństwa, nie zasługują na żadne z nich."
Ale w takim razie jak się bronić?
Z całą pewnością, trzeba mieć świadomość, jakie dane zbierają na nasz temat amerykańskie korporacje. Jednym z najbardziej krytycznych urządzeń, jest tel. komórkowy, z zainstalowanym modułem gps oraz podłączeniem do internetu. Taki tel. posiada głośnik, mikrofon, kamerę, lokalizator gps. Dosłownie wszystko, czego potrzeba, aby śledzić oraz inwigilować daną osobę.

Na pierwszy ogień idzie wiec wymiana systemu operacyjnego. Domyślny system jaki miałem, czyli Android niestety, nie pozwalał mi na pełną kontrolę, np. nie pozwalał mi na usunięcie aplikacji do portalu facebook.com. Nie dało się odinstalować facebooka, to odinstalowałem cały system ;)

Czy instalacja jest trudna? Nie. Uważam, że jest stosunkowo prosta.

Na wiki cyanogenmod'a znaleźć odpowiedni, dla siebie model tel., a nast. wejść w link pod zakładką "Installation", np. Install_CM_for_anzu.

Proces instalowania jest opisany bardzo dobrze. O ile czasami trzeba doinstalować pewne dodatkowe biblioteki (np. adb) lub uruchomić niektóre skrypty jako root (np. sudo fastboot zamiast fastboot) o tyle jedny większy problem miałem dopiero przy punkcie 8, w którym syst. operacyjny na laptopie (Ubuntu) nie wykrywał podłączonego urządzenia, ale wtedy znalazłem inny przydatny link, dzięki któremu udało mi się sprawnie dokończyć proces instalacji.



czwartek, 1 stycznia 2015

KeePassX – przechowuj hasła bezpiecznie (i wieloplatformowo)

W jednym z moich poprzednich wpisów, z maja 2014 zrobiłem notkę nt. programu KeePass. Kto nie zna tego programu, niech się zapozna, ponieważ zwiększa on bezpieczeństwo haseł, jakie mamy na różnych serwisach internetowych.

Dzięki temu programowi, możemy mieć unikalne i bardzo bezpieczne hasła dla każdej z witryn, do których się logujemy. KeyPass sam w sobie jest fajny, ale posiadał pewne ograniczenie -> został napisany w .NET, a co za tym idzie, natywnie działał pod Windowsem lub za pomocą biblioteki Mono na Linuksach.

Teraz przedstawiam kolejną ewolucję tego oprogramowania, czyli KeePassX, który początkowo był portem KeePass na Linuxa, a obecnie został oddzielnym programem.

Linki:
Strona projektu: http://www.keepassx.org/
Adres na githubie: https://github.com/keepassx/keepassx

niedziela, 16 listopada 2014

dotPeek, czyli darmowe narzędzie do reverse engineering

dotPeek to nowe, darmowe narzędzie do deasemblacji (inżynierii wstecznej) od twórców ReSharpera, czyli JetBrains (link). Czym jest deasemblacja? Jest to próba odtworzenia kodów źródłowych na podstawie skompilowanych plików .dll lub .exe. O tym, że w .NET jest to możliwe wie każdy, kto zetknął się z mechanizmem refleksji, czyli... każdy szanujący się programista. Co jest fajnego w dotPeek, po za tym, że jest darmowe? To, że kod po deasemblacji wygląda na naprawdę zbliżony do tego, jaki widzimy w Visual Studio. Polecam zgrać i się nieco pobawić :)

sobota, 24 maja 2014

KeePass – przechowuj hasła bezpiecznie

Jednym z problemów, z jakimi spotykają się różni użytkownicy komputerów, posiadający dostęp do wielu zasobów (np. aplikacji internetowych, baz danych itp.) jest problem związany z ilością potrzebnych loginów i haseł. W teorii hasło do każdego konta powinno być inne, jednak w praktyce bardzo trudno jest pamiętać 20-50 różnych haseł do różnych kont. Na szczęście, z pomocą przychodzi nam darmowa aplikacja "KeePass", która będzie przechowywała za nas odpowiednie loginy i hasła w sposób bezpieczny (zaszyfrowany). My, jako użytkownicy, jedynie potrzebujemy znać hasło do naszego pliku z zaszyfrowanymi danymi w KeePass (który możemy przenosić między komputerami, np. za pośrednictwem pendrive), a już szczegółowe loginy i hasła do konkretnych stron, aplikacji, usług, baz danych znajdować się będą w KeePass-ie. 

Linki: 

piątek, 18 października 2013

Rozszyfrowywanie CAPTCHA z pomocą zewnętrznego (płatnego) klienta

CAPTCHA, to rodzaj techniki stosowanej jako zabezpieczenie na stronach www, celem której jest dopuszczenie do przesłania danych tylko wypełnionych przez człowieka link do wikipedii.

Najczęściej jest to rysunek, który wymaga od użytkownika własnoręcznego wpisania, tworzony w taki sposób, aby rozwiązanie tego sposobem mechanicznym było maksymalnie skomplikowane. Same algorytmy rozwiązywania captcha są skomplikowane i bazują na algorytmach szyfrowania i deszyfrowania. Na szczęście, nie musimy się znać na wszystkim i można te zadanie zlecić komuś innemu, kto się na tym zna dużo lepiej niż my. Przykładem firmy, która się specjalizuje w rozwiązywania zabezpieczeń typu CAPTCHA jest deathbycaptcha.

Najnowsza wersja (4.2) posiada bibliotekę przygotowaną dla języków:
-.NET (C#, Visual Basic)
- AutoIt3
- iMacros
- C (client and libs' source code)
- Java
- Perl 5+
- PHP v5+
- Python v2.5+ and v3.0+
- Command-line tool for Windows, Linux (i386 and x86-64) (see usage note below)
- Plugin for MyAdTools bots

oraz klienta firm 3 (nie wspierane przez producenta)
- Ruby

Producent udostępnia przykład wykorzystania API w językach:
- PHP
- C#

Osobiście wybrałem przykład działający w C# i działa tak, jak należy, tzn. do projektu dodajemy bibliotekę .dll, w wykonywanym pliku .cs dokładamy nową przestrzeń nazw, za pomocą której tworzymy obiekt. Na obiekcie wywołujemy przeciążoną metodę .Decode (captcha możemy podać, np. jako tablicę bajtów) i... to wszystko :)
Dodatkowo mamy metodę GetBalance(), która sprawdza bilans naszego konta (czyli w razie potrzeby możemy napisać automat przypominający nam o tym, że kończą się pieniądze przeznaczone na rozwiązywanie captcha).


Ile to kosztuje?
1k Captcha - 1.390 dolara, co przy aktualnym kursie dolara daje nam ~ 4.22zł za każde rozwiązane 1k CAPTCHA, czyli nie jest to jakiś nie wiadomo jaki majątek.

poniedziałek, 30 września 2013

Odrobina kryptografi

W przypadku, gdy zaistnieje potrzeba wykorzystania kryptografii, tj. zakodowania pewnych danych w aplikacji (z możliwością ich późniejszego odszyfrowania), powinno się unikać korzystania ze standardowych algorytmów szyfrujących dostępnych w .NET 2.0, ponieważ nie zapewniają one wystarczającego bezpieczeństwa.  W miarę bezpieczny, wydaje się algorytm  AES, jednak jak to w kryptografii bywa, skuteczna użyteczność poszczególnych algorytmów z biegiem czasu maleje.

Link, do działającego algorytmu w C#, można znaleźć na stackoverflow.com

Osobiście miałem okazję z niego korzystać w momencie, gdy jedynym skutecznym sposobem przekazania danych identyfikacyjnych z głównego okna aplikacji do popupa było wysłanie danych za pomocą querystringa (klient zażyczył sobie przeniesienie wszystkich plików typu BLOB z naszej bazy danych, do zewnętrznego syst. plików obsługiwanego przez firmę zewnętrzną z możliwością obsługi załączników do wniosku przez aplikacje trzecie).

Inne przydatne linki:
stackoverflow.com - how-to-start-learn-cryptography-with-c-sharp
http://stackoverflow.com - c-sharp-rsa-encryption-decryption-with-transmission



sobota, 27 października 2012

Adres komputera, korzystającego z naszej strony

    Uzyskanie informacji nt. komputera, z którego wykonano jakąś czynność jest bardzo ważne, z punktu widzenia bezpieczeństwa. Informacja ta, jest ważna zarówno w przypadku systemów wewnętrznych (intranet), jak i systemów zewnętrznych (internet).
    W przypadku intranetu, jednym ze szczególnych przypadków jest "usuwanie rekordów z bazy danych" (np. usuwanie faktur w systemie księgowym), gdzie oprócz loginu osoby wykonującej akcję (dost. z systemu), chcemy mieć dla pewności informacje nt. komputera, z którego wykonano akcję.
    W przypadku internetu, chcemy mieć zazwyczaj informacje, nt. komputera, który próbuje się włamać do naszego systemu, lub wykonuje inną nieporządaną akcję (np. atak DDoS).

W jaki sposób uzyskać informację nt. komputera, korzystającego z naszego systemu? Wykorzystamy do tego celu klasy z przestrzeni nazw "System.Web" oraz "System.Net".

using System.Web;
using System.Net;
IPHostEntry hostEntry = Dns.GetHostEntry(HttpContext.Current.Request.ServerVariables["REMOTE_HOST"].ToString());

Praktyczny sposób wykorzystania zmiennej hostEntry prezentuje przykład, wykonany na zwykłej stronie asp.net (web forms):


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web;
using System.Net;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string ComputerName = "";
        IPAddress[] IpAdressList = null;
        StringBuilder sb = new StringBuilder();
        try
        {
            IPHostEntry hostEntry = Dns.GetHostEntry(HttpContext.Current.Request.ServerVariables["REMOTE_HOST"].ToString());
            ComputerName = hostEntry.HostName.ToString();
            IpAdressList = hostEntry.AddressList;
        }
        catch { }
        sb.AppendLine(string.Format("Nazwa komputera {0}", ComputerName));
        if (IpAdressList != null)
        {
            for(int i=0; i < IpAdressList.Length; i++)
            {
                sb.AppendLine(string.Format("Typ adresu IP {0}, adres IP {1}", IpAdressList[i].AddressFamily, IpAdressList[i].ToString()));
            }
        }
        string computerInfo = sb.ToString();
    }
}

   Posiadając informacje nt. komputera, możemy te informacje zapisać do bazy danych, lub do logów. W przypadku aplikacji asp.net preferuję wykorzystania gotowego rozwiązania, jakim jest log4net, natomiast w przypadku Sharepoint 2010 logowanie do natywnych logów sharepointa (jak sie to robi opisze w jednym z przyszłych wpisów).

Edit: Niestety te metody w praktyce nie okazały się na tyle dobre, jak być powinne. Nowe metody:

        public static string GetUser_IP()
        {
            string VisitorsIPAddr = string.Empty;
            if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
            {
                VisitorsIPAddr = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
            }
            else if (HttpContext.Current.Request.UserHostAddress.Length != 0)
            {
                VisitorsIPAddr = HttpContext.Current.Request.UserHostAddress;
            }
            return VisitorsIPAddr;
        }
        public static string GetUserIP()
        {
            string ipList = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (!string.IsNullOrEmpty(ipList))
            {
                return ipList.Split(',')[0];
            }
\            return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
        }
Używanie
        string visitorIp = GetUser_IP();
        int intAddress = BitConverter.ToInt32(IPAddress.Parse(visitorIp).GetAddressBytes(), 0);

sobota, 22 września 2012

Obrona przed XTML Injection, XSS (Cross-Site Scripting) poprzez Strip

Jednym z najpoważniejszych zagrożeń związanych z bezpieczeństwem aplikacji internetowych jest HTML Injection, czyli jedna z odmian Code Injection. Problem bezpieczeństwa związany HTML Injection polega głównie na Cross-Site Script, czyli wstrzyknięciu na stronę www kodu HTML zawierającego wykonujące się skrypty (np. w języku 'Javascript'), które mogą służyć m.in. do zmiany ustawień konta, wyciągania wrażliwych danych od użytkownika i innych niepożądanych czynności.
Kod HTML zawierający szkodliwe skrypty można wstrzyknąć np. do textBoxów pobierających od użytkownika dane.

W jaki sposób się przed tym bronić? Jednym ze skutecznych sposobów ochrony przed tego typu nieczystymi zagraniami jest walidacja tekstu wpisywanego przez użytkownika za pomocą wyrażeń regularnych.Metodą, która wykonuje za nas odpowiednią walidację, jest przedstawiona poniżej metoda Strip:

using System.Text.RegularExpressions;

public static string Strip(string text)
{
    return Regex.Replace(text, @"<(.|\n)*?>", string.Empty);
}
 Stosowanie przez nas tej metody, na każdym "stringu" wpisywanym przez użytkownika, przed zapisaniem go do bazy danych, nie będzie miało zauważalnego wpływu na wydajność, za to zdecydowanie podniesie bezpieczeństwo naszej aplikacji.