Running with Ruby

Tag: spam

Wyciek bazy sdu.pl i mailing do poszkodowanych z pomocą Rubiego (nie Railsów)

Wczoraj ktoś znalazł w Google zrzut z bazy danych, zawierającej loginy, hasła i e-maile użytkowników pewnego portalu (około 2,5 tysiąca). Przerażające jest to, że hasła nie były nawet hashowane (nie mówiąc już o soleniu). Wprawdzie baza była dość stara (2006 rok), jednak mając na uwadze dobro użytkowników, postanowiłem rozesłać im wiadomość e-mail informującą o konieczności zmiany haseł w swoich skrzynkach.

Oczywiście wykorzystałem do tego język Ruby. Mailing postanowiłem zrobić z serwera SMTP (maile rozsyłane z localhosta często automatycznie trafiają do spamu). Aby to w miarę sprawnie rozesłać, postanowiłem użyć biblioteki ActionMailer należącej do frameworka Ruby on Rails. Cały framework nie był mi potrzebny, więc załączyłem tylko to co trzeba.

Pierwszą rzeczą jaką należy zrobić, jest dołączenie bibliotek oraz konfiguracja ActionMailera:

#coding: utf-8
require 'action_mailer'

ActionMailer::Base.smtp_settings = {
    :domain => "nasza.domena.pl",
    :user_name=> "nasz@email.pl",
    :password=> "naszehaslo",
    :address=> "nasz.adres.pl",
    :port=> 587,
    :authentication=> :plain,
    :enable_starttls_auto=> true
}

Następnie tworzymy sobie klasę służącą do wysyłania emaili:

class Mailing < ActionMailer::Base
  def warning(to)
    recipients  to
    from    'nasz@adres.email'
    subject 'Wyciek bazy danych'
    body    'Treść wiadomości ostrzegawczej'
  end
end

Mamy już jak wysyłać wiadomość, musimy jeszcze mieć do kogo. Skorzystamy z wyrażenia regularnego, które z danego wiersza kodu, wyciągnie nam wszystkie adresy e-mail. Zadeklarujemy też sobie tablicę do której będziemy te adresy wrzucać:

reg = /[A-Z0-9._%-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}/i
emails = []

Następnie otwieramy nasz plik z e-mailami (np. właśnie dump z bazy), i odczytując wiersz po wierszu, wyciągamy wszystkie adresy e-mail:

File.open("plik_zrodlowy.sql", "r") do |infile|
   while (line = infile.gets)
      next unless  line.scan(/#{reg}/).size > 0
      line.gsub(/#{reg}/).each { |em| emails << em }
   end
end

Wyciąganie odbywa się bardzo prosto. Najpierw sprawdzamy czy w danym wierszu istnieją jakiekolwiek dopasowania (adresy e-mail) i jeśli tak, to wrzucamy je do tablicy emails. Jeśli nie ma, przechodzimy do następnej linii.

Mamy już jak wysyłać, mamy też do kogo. Nie pozostaje nam nic innego jak to rozesłać. Zastosowałem poniżej najprostszą metodę możliwą. Jeden wątek i pętelka. Wydajniej byłoby zrobić to np w 2-3 wątkach, jednak było już późno i mi się nie chciało ;)

i = 0
emails.uniq.each do |email|
	i+=1
	begin
		Mailing.warning(email).deliver
	rescue Exception=>e
		puts e
	end
	puts "#{i} - #{email}"
end

W tym fragmencie interesujące są dwie rzeczy. Po pierwsze dzięki wywołaniu metody uniq na e-mailach, pozbywamy się powtórzeń, co gwarantuje nam że wiadomość zostanie wysłana tylko raz do danego odbiorcy.

Po drugie, korzystamy z bloku z przechwytywaniem wyjątków. Dzięki temu, nawet jeśli ActionMailer zwróci nam jakiś błąd przy którejś z wiadomości, rozsyłanie nie zostanie przerwane.

To by było na tyle. Przypominam tylko o tym, żeby nadmiernie nie spamować użytkowników ;)

Łańcuszki (nie)szczęścia (i inny niechciany spam)

Wczoraj dostałem wiadomość e-mail zawierają tzw. “łańcuszek”. Nic nie byłoby w tym dziwnego, gdyby nie to jak łatwo ten łańcuszek przerodził się w świetną pożywkę dla spamerów i wszelkiej maści reklamodawców.

Ale od początku, czym jest łańcuszek:

Łańcuszki to wiadomości które próbują wymusić określone zachowanie, nakazują adresatowi skopiowanie treści łańcuszka i rozesłanie go dalej.

Wikipedia

Niby nic specjalnego, ot kolejna wiadomość którą możemy albo i nie rozesłać. Jest w tym jednak jedno (a może i kilka) “ale”. O ile część łańcuszków powstała dla zabawy, o tyle wiele z nich powstało w celach nie do końca szczytnych czy też zabawnych.

Zanim przybliżę wam dokładniej strukturę i cele łańcuszków, najpierw omówię do kogo są one skierowane.

Łańcuszki internetowe skierowane są głównie do osób nazwijmy to “wysokiego ryzyka”, a są to w głównej mierze:

  • ludzie starsi
  • osoby niezaznajomione z komputerem i internetem
  • osoby o wysokiej empatii (współczujące innym)
  • ludzie naiwnie (niestety) wierzący innym osobom poznanym w internecie
  • kobiety
  • “znudzeni” pracownicy biurowi

Poniżej postaram się krótko scharakteryzować poszczególne grupy:

Ludzie starsi – często potrafiący wykonywać tylko podstawowe operacje w świecie internetu, nierozumiejący zagrożeń jakie płyną z niewłaściwego korzystania ze zdobyczy technologii.

Osoby niezaznajomione z komputerem – podobnie jak ludzie starsi, także osoby z tej grupy rzadko wiedzą czym są wirusy, spam, łańcuszki, malware, itd.

Osoby o wysokiej empatii – dużo łatwiej jest takie osoby namówić do “pomocy” czyli rozsyłania wiadomości

Ludzie naiwnie wierzący innym – wierzą osobom poznanym w internecie które niekoniecznie są tymi za których się podają

Kobiety – nie chcę tutaj wyjść na szowinistę, jednak na 237 adresów e-mail z czego płeć właścicieli dało się określić w przypadku 194 adresów, 30 adresatów było płci męskiej. Najprawdopodobniej wynika to z faktu że łańcuszek który analizuję dot. chorego dziecka.

Pracownicy biurowi – analizując domeny skrzynek mailowych, aż 135 (tak, 135!)  razy były to domeny firmowe bądź domeny instytucji użytku publicznego.

Jak rozpoznać łańcuszek?

Rodzajów łańcuszków jest bardzo dużo, więc nie zawsze łatwo jest stwierdzić co jest a co nie jest prawdą. Jednak należy założyć że jeśli chociaż przeszła nam myśl że to może nie być prawdą, to najprawdopodobniej nią nie jest.

Rozpoznawanie łańcuszków pokroju “umrzesz jutro jeśli tego nie roześlesz …” jest stosunkowo proste.

Gorzej jest z łańcuszkami w których zamieszczono prośbę o pomoc. Często (tak jak i w tym wypadku) zamieszczone jest w nich zdjęcie osoby poszkodowanej. Smutne niestety jest to, że często są to zdjęcia ludzi (zazwyczaj dzieci) których los doświadczył naprawdę. Takie zdjęcie daje wiarygodność łańcuszkowi i “zmiękcza” serca. Poza zdjęciem jednak, nie ma w tych łańcuszkach nic prawdziwego. Rzekomy “kod html” który miałby dawać 3 grosze za każdą wysłaną wiadomość, nigdy nie istniał i nie miał racji istnieć. Jednak dla ludzi nieobeznanych “kod html” brzmi profesjonalnie i dodaje autentyczności.

Dane szpitala i doktora który zajmował się tym przypadkiem tak samo są wymyśleni (może istnieją naprawdę jednak nie zajmowali się tym przypadkiem – dowód tutaj).

W przypadku tego typu łańcuszków najlepiej założyć sobie że ŻADEN NIE JEST PRAWDZIWY. Nawet te zawierające dane takie jak: imienia, nazwiska, adresy, numery kont, często są fałszywe i zostały podane tylko po to aby ludzie myśleli że to co czytają jest prawdą. Ludzie którzy przeżyli prawdziwe tragedie, często korzystają z pomocy fundacji  i organizacji wspierających zbiórki pieniędzy. Odbywa się to za pomocą smsów czy też przelewów, jednak nigdy organizacje takie nie wysyłają spamu i łańcuszków. Nigdy też nie proszą o rozsyłanie wiadomości do osób trzecich.

Czasem (bardzo rzadko) zbiórki nazwijmy to “prywatne” mogą się odbywać, ale i tutaj można stosować zasadę ograniczonego zaufania: jeśli nie znam osoby poszkodowanej lub jej rodziny bezpośrednio, tragedia nie zdarzyła się w mojej okolicy, nic nie wiem o tych osobach z pewnego źródła to najprawdopodobniej NIE jest to prawda.

Wiemy już więc czym są, do kogo są skierowane i jak działają tego typu wiadomości. Jednak wciąż pozostaje nam pytanie najważniejsze:

Po co?

Odpowiedź na to nie jest jednoznaczna. Samo pytanie jest po części źle zadane. Powinniśmy raczej zapytać do czego można wykorzystać taki łańcuszek jaki dotarł do mnie?

Oczywistą możliwością jest wyciągnięcie z wiadomości adresów e-mail które wiemy że są “żywe”. Ale pójdźmy krok (a później i kilka) dalej. Ludzie rozsyłają takie wiadomości zazwyczaj nie ukrywając innych odbiorców (nie korzystają z pola “Ukryta kopia”). Mamy zatem listę adresów e-mail oraz w przypadku 187 kont, także imię i nazwisko właściciela.

Biorąc pod uwagę to że jest tam dużo adresów firm i instytucji, osoba biegła jest w stanie zlokalizować dużą część z tych osób, korzystając z popularnych serwisów społecznościowych, jak nasza-klasa i facebook.

Ktoś powie że przecież jest dużo osób o danym imieniu i nazwisku. Tak, jednak ile jest osób o takim imieniu, nazwisko, danym mieście oraz np miejscu pracy a także potencjalnych znajomych (założyć możemy że dana osoba z naszej listy, powinna znać przynajmniej niektóre z innych “zlistowanych” osób).

Mając imię, nazwisko, miejsce pracy, znajomych i wiele innych danych, bardzo łatwo jest dojść do adresów tych osób i wielu innych prywatnych danych i informacji.

Analizując taką wiadomość poznałem także imiona i nazwisko 102 osób związanych z Zielonogórskim Wojewódzkim Urzędem Pracy. Jakie to daje możliwości (to i wiedza z poprzednich akapitów)?

  • Wiem że do osób tych mogę próbować wysłać spam zawierający niebezpieczne załączniki (wirusy i inne szkodliwe oprogramowanie)
  • Wiem że tworząc wiadomość o analogicznej zawartości, “pomogą” mi rozpowszechnić mój łańcuszek
  • Gdybym chciał dostać się do wewnętrznych systemów wybranego urzędu lub instytucji, jako słabe ogniwo wybrałbym właśnie te osoby które mam na liście (część z nich to na pewno pracownicy)
  • Wiem też że zamiast pracować pracownicy ci zajmują się rozsyłaniem łańcuszków ;)
  • Mam listę osób do których mogę słać wiadomości promocyjne i inne “super oferty”
  • Mógłbym próbować wydobyć hasła i inne dane dot. ich pracy, korzystając z rozmaitych technik socjologicznych
  • Wiele, wiele innych niebezpiecznych rzeczy

Tak więc zanim zechcesz komuś pomóc przesyłając wiadomość, pamiętaj ze najprawdopodobniej zaszkodzisz tym sam sobie!

Copyright © 2018 Running with Ruby

Theme by Anders NorenUp ↑