Analiza sajta lakodoposla dot kom

Ovo je kratki pregled sadržaja baze koju je nepoznata osoba skinula sa sajta lakodoposla dot com i ujedno savjet kako da osigurate tudje i svoje privatne informacije. Ovdje će izostati analiza šifri (karakteristike, frekvencija, duzina, ostalo) koja bi trebalo da bude u narednom periodu a i ujedno će sadržaj biti u Wifi pass fajlu

Baza se pojavila prvo na jednom od reddit subova, tj skrihshoot a poslije nekog vremena i link ka kompletnoj bazi.

Šta se nalazi u bazi?

Baza sadrži informacije o poslodavcima i radnicima koji traže posao. Jedan dio se odnos na komunikaciju izmedju administracije sajta i poslodavaca gdje se vrši plaćanje usluga. Svi skupa imaju sljedeće informacije: ime/prezime, email, šifre, adresa/ulica/grad, broj telefona, datum rodjenja.

Slika dumpa baze Slika zapisa baze

Baza sa korisnicima počinje nekad od 2008 godine a posljednji unos/izmjene su 28 Jula 2022 u 02:21

posljednji datum u bazi

Informacija o datumu kreiranja zadnjeg naloga je jako bitna kao i broj kreiranih naloga ukupno i vremenski period.

Baza sadrži oko 510.000 zapisa radnika. Od toga je u 2022 godini registrovano 10.000.

Kako su došli do baze?

Baza je vjerovatno skinuta sa nekim od alata (sqlmap, sqlninja i slično) a preko buga u sajtu (vjerovatno SQL injection). Napadac je vjerovatno onda prebacio u svoj phpmyadmin pa dumpo/izbacio bazu u sql fajl i okacio na jedan od foruma. Razlog je gledanje informacija iz baze (tražio je kartice, pristupne šifre, mailove i drugo) U ovom teksu se neću baviti propustima i ovo sve navedeno je nagadjanje u nedostatku informacija.

Kako ne raditi sa privatnim informacijama

Ovo je najbitniji dio teksta i ovome sam želio pisati. Ovdje ću tek nekoliko osnovnih i bitnih stavki vezano za sigurnost napomenuti. Ima ih još pa čak u narednom periodu planiram preduzeti neke korake kako bi se generalno stanje na ovom polju u BH/SRB/CG/HR počelo mjenjati.

Trajanje zapisa privatnih informacija

Svako kreiranje naloga treba da ima kada je osoba zadnji put se logovala. Iz te informacije treba izvršiti da poslije 90 dana neaktivnosti šaljemo korisniku email upozorenja a zatim ako nema odgovora - brišemo iz baze. Sa ovim pristupom od 510.000 privatnih informacija, šteta bi se svela na svega 2000 do 4000 naloga.

Kvalitet šifre + 2FA ili čak OAuth2 identifikacija

Sve šifre se čuvaju u nekoliko formata: plain text, wordpress hash(wp hash) i bcrypt hash(bcrypt). Sajt lakodoposla nema minimum duzine (idealno 12 do 16), miks slova, brojeva i specijalnih znakova. Prilikom kreiranja naloga šifre kao "12345678" je moguće unijeti. Takve stvari su nedopustive.

Sajt takodje nema 2FA (izuzetno lako integrisati sa freeOTP) koji bi u slučaju pogadjanja šifre moguće je sačuvati pristup sajtu (pod uslovom da nema curenja baze i slično). Čak i ako se koristi ista šifra za različite sajtove 2FA pravi ogromnu razliku.

freeOTP freeOTP logo

Sljedeći iz ovog arsenala je OAuth2 protokol koji može da posluži za registraciju i pristup sajtu. Sa SSO (single sign-on) korisnik može autorizovati sajt da preuzme informacije i kasnije da pristupi istom tom sajtu. Ovdje se ne mora posjedovati šifra - sve se čuva u OAuth provajderu a minimum informacija koje sajt treba da ima su email, ime i prezime, ostalo.

OAuth2 OAuth2 - slika preuzeta sa InterSystems Learning Services youtube kanala

Minimiziranje dijeljenja privatnih informacija i skladištenja u bazi

Imamo nekoliko bitnih privatnih informacija koje moramo držati u bazi a sve se mogu redukovati i smanjiti negativni uticaj curenja informacija. Ovdje pričamo o ime/prezime, email, broj telefona, CV-iju, tekstualne poruke.

Ime i prezime: redukovati na samo ime sa početnim slovom prezimena. Apsolutno nebitno poslodavcu a u komunikaciji kasnije moguće je saznati.

Email: Ukratko moguće je u bazi drzati email koji je povezan sa korisnikom i loginom, a da pri tome ne držimo pravi email. Slanje na ovaj email bi mogao samo servis zbog informacija/resetovanja i slično. Samim tim bi npr imali 9dc3242cd523367c2296afbc65520f29@domena.com gdje bi na email serveru identifikacija za 9dc3242cd523367c2296afbc65520f29 bila prema ovojenekimail[at]gmail dot com. Naravno, ovdje se može smanjiti veličina hasha, uzeti neki drugi koji pruža bolju sigurnost (argon2id, scrypt, PBKDF2) i napraviti format koji je pogodan za email adresu.

Broj telefona: Ako postoji mogucnost izbaciti skroz. Ako bas se mora implementirati onda bi jedinstveni ID bio u bazi a pravi broj bi se čuvao na drugom mjestu i informacije slale kroz REST API.

CV: Izbaciti sve privatne detalje, imena firmi - kasnije je moguće poslati zainteresovanom poslodavcu puni CV sa detaljima. Ovdje bi trebalo da sama firma koja vodi sajt pregleda isti taj CV i ukloni isto sve privatne detalje radnika i firmi.

Tekstualne poruke: Godina je 2022 i vi dalje vjerujete da vam niko neće sem vas samih čitati poruke? Public key, moguće je šifrovati poruke i držati ih kao takve u bazi i za svaku sesiju / tekst imati ključ koji se opet čuva sa master ključem / privatnim ključem (ovdje treba PKI al ideja je da se poruke ne ostavljaju u otvorenom tekstu). Uglavnom: ne ostavljajte poruke u bazi u "otvorenom tekstu"

Zaključak

Ovaj incident je samo "demo" sajtova u SRB/HR/BH/CG/MK gdje se ne vodi računa o privatnosti korisnika. Samo da je ispoštovano pravilo 90 dana il manje - uticaj ovoga bi bio redukovan sa 510.000 zapisa na 2000 do 4000. Pričamo o brojevima telefona, email adresama, datumima rodjenja, punim imenima i prezimenima oko pola miliona ljudi. Ovakve informacije se mogu koristiti za dalji napad, uznemiravanje ljudi, preprodati ili zloupotrebiti na druge načine. Sajt se nalazi na Linodu u USA - isto nedopustivo kada znamo da informacije gradjana Srbije treba da budu u Srbiji. Nisam spominjao standarde, penetration testing, hardening sajta i drugo - koji bi definitivno smanjili šansu da se dese ovakvi ishodi.

Zahvalnica

Gospodinu @milos_rs_ koji je pokazao skrinshoot i naveo početni dio (phpmyadmin). Svima koji stvaraju i kreiraju sadržaj a vezano za računarsku sigurnost.

How to run and setup twint (OLD - DOES NOT WORK)

Twint is an OSINT tool for Twitter intelligence gathering and it is used by many people in the security industry (as others also). In this short article, I am going to give you a list of commands to run with no problem.

Twint is currently archived and the normal setup produces an issue. So, in this article, you will see how to run it with no issue.

Source of twint: https://github.com/twintproject/twint I would guess you are running Linux and have docker installed. There is 2 possible way. One is using docker - and the other we skip docker install and run other commands (if our Linux is Ubuntu/Debian and support python 3.6 or 3.9)

As the first step, you need to download the docker image.


docker run -ti --rm kalilinux/kali-rolling:latest bash

If all goes fine (pull, and running bash under docker) you will get into prompt of Kali Linux.

We go to the next step in this process install and run python3.9/virutalenv and activate envoriment


apt update && apt -y install git python3.9 python3-pip

pip3 install virtualenv

virtualenv --python=python3.9 py39

cd py39

source bin/activate

After this, you will get into a virtual env for development.

Setup and run of twint.


pip3 install --upgrade -e git+https://github.com/twintproject/twint.git@origin/master#egg=twint;

twint -u twitter --user-full

If all goes ok - it would show information on user @twitter

Kubernetes setup on Ubuntu 22.04 LTS (Jammy Jellyfish)

This is a quick and short text on how to install Kubernetes on Ubuntu 22.04. Spend the last 2 weeks solving issues with Containerd and Kubernetes.

After reviewing the GitHub issue for Kubernetes - found this to solve a problem that I have.

The problem manifests as up/down for Kubernetes health and running buggy. On Ubuntu 20.04 there was no problem. The issue is connected with Containerd Cgroups settings for version 1.5.9 (any above this version would work fine, read a link that I provided on information). So let us start with installation.

Kubernetes Kubernetes map - from cloudsigma.com

Kubernetes setup on Ubuntu 22.04

Let me guess you have 2 machines, with Ubuntu 22.04 installed. First, will be used for the k8s control pane. The second will be used as a worker/pod. Both machines have the same steps for k8s installation. Please notice that the IP addresses I am using are from my network - so add proper IP for cp1 and worker1
Here you go for the k8s control pane and worker:


apt update
apt upgrade

echo is this IP of your machine?

echo "192.168.50.204  worker1.example.com worker1" >> /etc/hosts

echo "192.168.50.165 cp1.example.com cp1" >> /etc/hosts

hostnamectl set-hostname cp1
hostnamectl set-hostname worker1

modprobe br_netfilter
modprobe overlay

cat << EOF | tee /etc/modules-load.d/k8s-modules.conf
br_netfilter
overlay
EOF

cat << EOF |  tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

apt-get update ; apt-get install -y containerd

mkdir -p /etc/containerd

containerd config default | tee /etc/containerd/config.toml

sed -i "s/SystemdCgroup = false/SystemdCgroup = true/g" /etc/containerd/config.toml

systemctl restart containerd

swapoff -a

apt-get install -y apt-transport-https curl

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add

apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

apt install -y kubeadm kubelet kubectl

After you finish these commands on both machines, you have an exclusive command for the k8s control pane and for the worker. For Control Pane:


kubeadm init --pod-network-cidr=192.168.0.0/16

mkdir -p $HOME/.kube

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

chown $(id -u):$(id -g) $HOME/.kube/config

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml


After you finish this on the Control Pane machine, there will be a command printed similar to this and copy to CLI of worker1:



kubeadm join 192.168.50.165:6443 --token azlcfh.36lef5ty7890en1r6 --discovery-token-ca-cert-hash sha256:47a02b63e60278025d3423883a05a48e06f943195f06ebe414d929f60028e


Or you can execute on Control Pane and get printed:



kubeadm token create --print-join-command


and then execute on Worker1 command that is printed The output of this command is copied/past on the worker machine. You can add more worker machines with no problem.

If all goes ok you will be able to check with:



kubectl run curl --image=radial/busyboxplus:curl -i --tty 


this would run a container on pods and you can see if the network and other parts are running ok. Type exit to leave the container. to delete this pod:



kubectl delete pods curl


You can also see how this goes with my video: Youtube K8s setup

Thanks to this people

@Jocix84 and @Bojana_dev for support, direction, and inspiration!