Maciej Lasyk

OWASP Poland, 2013-10-17
Czemu rekrutacja na OWASPie?
●

Ponieważ ten system to webaplikacja

●

Ponieważ bazuje w 100% na FOSS (open-source)

●

Ponieważ security było dla nas bardzo istotne

●

Bo na OWASPie spotykają się ludzie, którzy mają wpływ na

procesy rekrutacji w innych firmach (hopefully) ;)
Rekrutacja
●

Sporo agencji / serwisów świadczących usługi rekrutacyjne

●

Potencjalnie ogromna ilość kandydatów

●

Procesowaniem kandydatów zajmuje się cały zespół

●

Rozmowy i testy pochłaniają wiele czasu
SysAdmin / Operations
●

Jest administratorem, programistą, testerem i sieciowcem

●

Performance tuning również nie jest mu obcy

●

Odpowiada za krytyczne (wszystkie) dane

●

Potrafi przenosić UPSy ;)

●

O 4 nad ranem w niedzielę rozumie kolegów z innych krajów ;)

●

Wszystko to robi w kontekście wysokiego bezpieczeństwa

●

Lubi grać (znacie admina, który nie gra?) ;)
Zagrajmy więc
●

Pomysł na grę? Nie Quake / Diablo / Warcraft ;)

●

pythonchallenge.com, wechall.net – CTFy są świetną formą

●

trueability.com – taki event dla adminów

●

Może więc coś w rodzaju CTFa / challenge?

●

Taki system musiałby spełniać kilka wymogów:
●

Optymalizacja czasu rekrutacji

●

Zminimalizować ryzyko odrzucenia dobrego kandydata

●

Być na tyle ciekawy aby przyciągał (kto nie lubi mindfscków)
Let's start the ball rolling
Zgłoszenie
1 etap – proste zadanie

Problem: spora liczba kandydatów (>100)

Cel: odsianie ludzi z innej bajki (80% odrzuceń!)

2 etap – tel/social.eng.

Cel: poznanie, manipulacja

3 etap – challenge

Global Thermonuclear War ;)
1 etap – telnetem przez SMTP

RFC-821/1869:
HELO/EHLO ??.....??

GPG us ur CV using
http://..../gpg.asc

Sporo nieznajomości GPG :(
RTFM!
1 etap – telnetem przez SMTP

RFC-821/1869:
HELO/EHLO my.hostname

1 haczyk – hostname nie serwera
a klienta (90% się złapała)

GPG us ur CV using
http://..../gpg.asc

Sporo nieznajomości GPG :(
RTFM!
1 etap – node.js
●

Początkowo serwer w C. Po 3 w nocy jednak node.js ;)

●

Co jest nie tak z node.js?
●

●

http://osvdb.org/ - 2 trafienia

●

http://1337day.com/, http://www.exploit-db.com/ - 1 trafienie

●

●

http://seclists.org/bugtraq/ - 0 trafień

https://nodesecurity.io/advisories - 4 trafienia

Czy to oznacza, że node.js jest “bezpieczny”?
Node.js – model działania
- Event driven
- Event loop
- Callbacks
- SPA, async, REST, Json

http://magnetik.github.io/
Node.js - zagrożenia
............................................________
....................................,.-'"...................``~.,
.............................,.-"..................................."-.,
.........................,/...............................................":,
.....................,?......................................................,
.................../...........................................................,}
................./......................................................,:`^`..}
.............../...................................................,:"........./
..............?.....__.........................................:`.........../
............./__.(....."~-,_..............................,:`........../
.........../(_...."~,_........"~,_....................,:`........_/
..........{.._$;_......"=,_......."-,_.......,.-~-,},.~";/....}
...........((.....*~_......."=-._......";,,./`..../"............../
...,,,___.`~,......"~.,....................`.....}............../
............(....`=-,,.......`........................(......;_,,-"
............/.`~,......`-...................................../
.............`~.*-,.....................................|,./.....,__
,,_..........}.>-._...................................|..............`=~-,
.....`=~-,__......`,.................................
...................`=~-,,.,...............................
................................`:,,...........................`..............__
.....................................`=-,...................,%`>--==``
........................................_..........._,-%.......`

●

Brak logów

●

Brak obsługi błędów - DoS

●

Brak konfiguracji – “+” czy “-”?

●

Brak filtrów sprawdzających user-input

●

JS: function as a variable

●

Evil eval(code). Server-side XSS

●

setInterval(code,2), setTimeout(code,2), str = new Function(code)

●

Moduły npm – kto i jak je tworzy?
Node.js – evil eval()
Node.js – evil eval()

W ten oto sposób rozszerzyliśmy funkcjonalność o http://node.js/myurl
Node.js - npm
https://blog.nodejitsu.com/npm-innovation-through-modularity

Przyrost ilości
modułów npm

Porównanie ilości
modułów/day
Node.js i innych
technologii
Node.js – jak żyć?
●

Używajmy frameworków: https://npmjs.org/ - uważnie

●

Moduły npm nie są validowane! Sprawdzajmy je:

●

Uważajmy na zależności między modułami

●

Własna obsługa logów i błędów – takie “must have”

●

Skoro to jest serwer to potrzeba nam rozwiązań sec-server-side:

https://nodesecurity.io

●

Monitoring – twórzmy aplikacje myśląc o tym jak je monitorować

●

Control-groups – ustalmy limity zasobów! (o tym zaraz...)

●

SELinux sandbox (o tym zaraz)
Node.js – SELinux sandbox
●

Ustawiamy aplikacji 'home_dir' i 'tmp_dir'

●

Aplikacja może domyślnie r/w z std(in|out) + defined FDs

●

Domyślnie – brak dostępu do sieci

●

Brak dostępu do nie swoich procesów / plików

●

Sandboxa możemy spiąć z cgroupsami :)

●

Pomocne: semodule -DB (no dontaudit)

●

grep XXX /var/log/audit/audit.log | audit2allow -M node.sandbox

●

semodule -i node.sandbox.pp
Node.js – SELinux sandbox
Node.js – jak żyć #2
●

Freeze node.js version per project?

●

Czytamy:
●

https://media.blackhat.com/bh-us-11/Sullivan/BH_US_11_Sullivan_Server_Side_WP.pdf

●

http://lab.cs.ttu.ee/dl91

●

https://github.com/toolness/security-adventure

●

Pseudo–konfiguracja – ustalajmy limity w kodzie (np. POST size)

●

try...catch ftw

●

use strict; - pomaga nawet w sprawie evala (częściowo)

●

Bunyan / dtrace: https://npmjs.org/package/bunyan

●

A node.js OS? No i instalujmy node.js z paczek (fpm choćby)
Etap 2 – social engineering
●

Celem tego etapu jest weryfikacja i poznanie kandydata

●

Christopher Hadnagy – SE framework (2k10):
●

http://www.social-engineer.org/framework/Social_Engineering_Framework

●

Każdy może się podać za rekrutera i zadzwonić do kandydata

●

Budowanie profilu/znajomości na Linkedinie jest bardzo proste

●

Zaufanie (lingo, znajomość tematu / środowiska: research)

●

Administrator jest osobą ze sporą wiedzą – jest dobrym celem

●

Wystarczy tylko zdobyć zaufanie i obniżyć poziom ostrożności
Etap 3 - wirtualizacja
●

Co nam potrzeba?
●

Nadzór nad procesem bootowania

●

Możliwość wpięcia się w konsolę

●

Sterowanie zasobami

●

Redundantny storage

●

Tryb rescue dla obrazu VM

●

Security by default

> AWS
> KVM/libvirt
> XEN/libvirt

> LXC
Etap 3 - wirtualizacja
boot

konsola

resources
mgmt.

redundant
storage

rescue VM

security
Etap 3 - wirtualizacja

VS
Wydajność XEN/HVM czy KVM?
Etap 3 - wirtualizacja

VS
Wydajność XEN/HVM czy KVM?
Z XEN/HVM mieliśmy problemy wydajnościowe – spore.
Tutaj wygrywa czerwony kapelusz i jego PV
(jednak z pomocą cgroups – KVM przy
sporym obciążeniu zachowuje się niestabilnie)
Etap 3 – bezpieczeństwo sieci
https://en.wikipedia.org

DMZ (Demilitarized Zone) – wydzielona część sieci zawierająca
usługi, które są wystawione bezpośrednio na świat i są też
najbardziej zagrożone atakami. Podział logiczny (VLANy) lub fizyczny
Etap 3 – bezpieczeństwo sieci
https://en.wikipedia.org

DMZ (Demilitarized Zone) – wydzielona część sieci zawierająca
usługi, które są wystawione bezpośrednio na świat i są też
najbardziej zagrożone atakami. Podział logiczny (VLANy) lub fizyczny
Etap 3 – bezpieczeństwo sieci
●

Wydzielony DMZ (VLAN?) dla hosta

●

Brak routingu / komunikacji tej DMZ z resztą

●

Tanie rozwiązania?
●

OpenWRT / DDWRT way || Pure Linux server

●

802.1Q – VLANy
Etap 3 – bezpieczeństwo sieci
●

Izolacja sieci na hoście KVM:
●

Host/network bridge: switch warstwy 2

●

netfilter / nwfilter (IBM)

●

domyślnie nie mamy izolacji pakietów dla VM
w bridge'u – ebtables null, no filtering

●

ebtables – filtrowanie warstwy 2 – w ten
sposób załatwiamy izolację

●

Albo virsh nwfilter-list
●

allow-arp,dhcp,dhcp-server,clean-traffic, noarp-ip-spoofing, no-arp-mac-spoofing, noarp-spoofing, no-ip-multicast, no-ip-spoofing,

no-mac-broadcast, no-mac-spoofing, noother-l2-traffic
●

L2 filtering? /proc/sys/net/bridge

https://www.redhat.com/archives/libvir-list/2010-June/msg00762.html
http://pic.dhe.ibm.com/infocenter/lnxinfo/v3r0m0/topic/liaat/liaatsecurity_pdf.pdf
Etap 3 – proces bootowania, VNC
●

Dostęp do procesu bootowania – VNC

●

Bezpieczeństwo VNC? SSL? Komplikacje..

●

A gdyby tak VNC over SSH tunnel?
●

Jest szyfrowanie

●

Żadnej zabawy z certami

●

Każdy z nas to już robił...
Etap 3 – restricted shells
●

Tunel SSH wymaga konta SSH (thank You Captain Obvious!)

●

A za pomocą konta shellowego można sporo nabroić...

●

Ograniczmy więc możliwe akcje użytkownika – restricted shells

Restricted shells wg. Google ;) =>
Etap 3 – restricted shells
●

Restricted shells są groźne – trzeba rozumieć jak działają!

●

W sprzyjających warunkach można uciec z rshella:

https://en.wikipedia.org/wiki/Rbash
Etap 3 – restricted shells
●

Rbash:
●

Jest w CentOSie / RHEL jako legit ;)

●

Zabrania trawersować katalogi

●

Zabrania używac bezpośrednich ścieżek do plików / katalogów (takich z '/')

●

Zabrania ustawiać PATH czy inną zmienną powłoki

●

Zabrania przekierowywać output komend

●

PATH=$HOME/bin – i niech tam będzie prawie pusto!

https://en.wikipedia.org/wiki/Rbas
h
Etap 3 – SSH tunnel / VNC
●

We must go deeper!
VM host
VM-Proxy

rshell / ibsh

rshell / rbash
Kandydat
VNC server
screen / ssh tunnel
Etap 3 – restricted shells
●

Inne shelle:
●

rssh – zezwala na wykonywanie scp, sftp, rsync itd

●

sudosh - http://sourceforge.net/projects/sudosh
●

●

Pozwala określać jakie operacja są dozwolone dla usera

●

●

Pozwala zapisywać całą sesję użytkownika i ją odtwarzać

Trochę outdated – lepiej sudosh3

Ibsh (small, fast, secure): http://sourceforge.net/projects/ibsh/
Etap 3 – control groups
●

zarządzanie zasobami w prosty sposób (ulimits, nice, limits.conf)

●

Potraficie przypisać 50 IOPS dla dowolnego procesu?

●

A może limit 100Kbp/s dla wybranego usera?

●

Problemy z memory–leakami w Javie?
Etap 3 – control groups

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html

●
●
●

Debian & RHEL friendly
Można uruchamiać aplikacje w kontekście cgroupy
Można żyjący proces przypisać do konkretnej cgroupy
Etap 3 – webaplikacja
●

OpenStack?

Trochę komplikacji. “Out of the box” tylko w internetach widzieli.
A zrób to wydajnie i bezpiecznie w kilka godzin ;)
Etap 3 – webaplikacja

Commodore OS ???
Etap 3 – webaplikacja

Commodore OS Vision FTW!
Etap 3 – webaplikacja
●

Apache + mod_security

●

mod_security + OWASP rules

●

PHP & Python :)

●

Prostota!

●

Sterowanie VM za pomocą screena i prostego pseudo – demona:
●

●

while(1) do: zarządzaj_VMkami();

I to po prostu działa!
Etap 3 – nagrywanie sesji SSH
●

Nagrywanie każdej sesji (tak, również screen)

●

Nagrywanie real-time (a nie flush co jakiś czas)

●

sudosh3 (fork sudosh) – powłoka pośrednicząca

●

auditd – niskopoziomowe narzędzie logujące wybrane syscalle

●

Asciinema (ascii.io, Marcin Kulik) – super, ale nie jako “audit”

●

Ttyrec – outdated: http://0xcc.net/ttyrec/index.html.en

●

Ssh logging patch - outdated: http://www.kdvelectronics.eu/ssh-logging/ssh-logging.html
Etap 3 – bezpieczeństwo danych
●

Gdyby tak stracić choć jedną VMkę... brr.

●

Ocena ryzyka – co nam wystarcza?
●

RAID1 / Mirror – “zazwyczaj” w skali kwartału wystarcza

●

Backupy – przydatne ;) RAID / replikacja to nie backup...

●

GlusterFS / DRBD – jeśli tylko mamy na to zasoby to polecam :)
KVM active host

KVM passive host

LVM

LVM
replikacja

Gluster brick

Gluster brick
Podsumowanie
Maciej Lasyk
http://maciek.lasyk.info
maciek@lasyk.info
Twitter: @docent_net

OWASP Poland, 2013-10-17

More Related Content

PDF
Rundeck & Ansible
PPTX
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'a
PPTX
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
PDF
Metaprogramowanie w JS
PDF
PHP-PM. Hit czy kit?
PDF
Monitoring sieci
PDF
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
PPTX
Jak zostać mobile deweloperem w 1 dzień
Rundeck & Ansible
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Metaprogramowanie w JS
PHP-PM. Hit czy kit?
Monitoring sieci
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Jak zostać mobile deweloperem w 1 dzień

What's hot (20)

PDF
Sekrety magicznego ogrodu Docker
PDF
Ansible - Automatyzacja zadań IT
PPTX
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...
PDF
Infrastructure As Code
PDF
Programowanie sterowników w Linuksie.
PDF
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PDF
100 M pakietów na sekundę dla każdego.
PDF
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
PDF
100Mpps czyli jak radzić sobie z atakami DDoS?
PDF
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
PDF
Ansible w praktyce
PPTX
PLNOG 17 - Robert Ślaski - Jak nie zostać bezrobotnym sieciowcem?
PPTX
Elasticsearch i Docker - skalowalność, wysoka dostępność i zarządzanie zasobami
PDF
Swoole w PHP. Czy to ma sens?
PDF
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
PDF
Vagrant, Ansible, Trellis - Środowiska developerskie
PDF
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
PDF
Security B-Sides Warsaw 2012 - Bezpieczenstwo IPv6 - Gawel Mikolajczyk
PDF
Czy naprawdę wiesz co robi twoja przeglądarka?
PDF
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Sekrety magicznego ogrodu Docker
Ansible - Automatyzacja zadań IT
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...
Infrastructure As Code
Programowanie sterowników w Linuksie.
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
100 M pakietów na sekundę dla każdego.
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
100Mpps czyli jak radzić sobie z atakami DDoS?
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
Ansible w praktyce
PLNOG 17 - Robert Ślaski - Jak nie zostać bezrobotnym sieciowcem?
Elasticsearch i Docker - skalowalność, wysoka dostępność i zarządzanie zasobami
Swoole w PHP. Czy to ma sens?
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
Vagrant, Ansible, Trellis - Środowiska developerskie
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Security B-Sides Warsaw 2012 - Bezpieczenstwo IPv6 - Gawel Mikolajczyk
Czy naprawdę wiesz co robi twoja przeglądarka?
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Ad

Viewers also liked (20)

PPTX
Building a Safer and Healthier Workspace with JD Edwards Health, Safety and E...
PPT
Allahabad - City of global repute
PPTX
Nature Thrill
PDF
PPTX
Hart & Ganley SOED 2016
PPS
PPT
Fundraising and the next gen 3.10.11
PPTX
RED Y NET (Cordara y Beltran)
PDF
05042 0-16-131 benjamin mauricio rivera fernandez
PDF
PDF
UX Poland 2014: N.Efimov & Y. Vedenin - Playful design
PPTX
From newspapers to newsbrands: challenging the myths
PPTX
Equity Scholarship Provision in Australian Universities: Insights and Directions
PPTX
ChEMBL UGM May 2011
PDF
My Gopeng Resort
PDF
第9章 ネットワーク上の他の確率過程
PDF
FFF Convention & IAFE Zone II Meeting - 20 Ways to Ruin a Fair Website
DOCX
Quick installation with an existing router or modern router
DOC
Waleed C.V
PDF
3 d pie chart circular puzzle with hole in center process 6 stages style 1 po...
Building a Safer and Healthier Workspace with JD Edwards Health, Safety and E...
Allahabad - City of global repute
Nature Thrill
Hart & Ganley SOED 2016
Fundraising and the next gen 3.10.11
RED Y NET (Cordara y Beltran)
05042 0-16-131 benjamin mauricio rivera fernandez
UX Poland 2014: N.Efimov & Y. Vedenin - Playful design
From newspapers to newsbrands: challenging the myths
Equity Scholarship Provision in Australian Universities: Insights and Directions
ChEMBL UGM May 2011
My Gopeng Resort
第9章 ネットワーク上の他の確率過程
FFF Convention & IAFE Zone II Meeting - 20 Ways to Ruin a Fair Website
Quick installation with an existing router or modern router
Waleed C.V
3 d pie chart circular puzzle with hole in center process 6 stages style 1 po...
Ad

Similar to Shall we play a game? PL version (20)

PDF
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
PDF
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
PDF
OWASP Appsensor in action
PDF
Leszek Miś "Czy twoj WAF to potrafi"
PDF
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
PPT
Bezpieczeństwo aplikacji webowych
PDF
Jak zostać Dev w DevOps? O zwiększaniu niezależności zespołów developerskich ...
PDF
Porażka nie wchodzi w grę, czyli o niezawodności
ODP
JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
PDF
Erlang @ SFI 2014
PDF
PLNOG16: Yoyo ! To my, pakiety ! Złap nas jeśli potrafisz, Leszek Miś
PDF
Linux. Serwery. Bezpieczeństwo
PDF
PLNOG 4: Paweł Andrejas - Onet Moduły
PPTX
PLNOG 21: Marcin Motylski - Bezpieczeństwo_i_Firewalle_w_Multi_Cloud / Data _...
PDF
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
PPTX
10 przykazań bezpiecznego programowania
PPTX
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
PDF
Produkcja aplikacji internetowych
PPTX
Robert Olejnik - Bezpieczeństwo w chmurach, czyli jak i dlaczego stworzyliśmy...
PDF
PLNOG 18 - Łukasz Bromirski - CEF, NetFlow, NetFPGA, Superman, Eureka, fd.io,...
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
OWASP Appsensor in action
Leszek Miś "Czy twoj WAF to potrafi"
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
Bezpieczeństwo aplikacji webowych
Jak zostać Dev w DevOps? O zwiększaniu niezależności zespołów developerskich ...
Porażka nie wchodzi w grę, czyli o niezawodności
JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
Erlang @ SFI 2014
PLNOG16: Yoyo ! To my, pakiety ! Złap nas jeśli potrafisz, Leszek Miś
Linux. Serwery. Bezpieczeństwo
PLNOG 4: Paweł Andrejas - Onet Moduły
PLNOG 21: Marcin Motylski - Bezpieczeństwo_i_Firewalle_w_Multi_Cloud / Data _...
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
10 przykazań bezpiecznego programowania
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
Produkcja aplikacji internetowych
Robert Olejnik - Bezpieczeństwo w chmurach, czyli jak i dlaczego stworzyliśmy...
PLNOG 18 - Łukasz Bromirski - CEF, NetFlow, NetFPGA, Superman, Eureka, fd.io,...

More from Maciej Lasyk (20)

PDF
Docker 1.11
ODP
Programowanie AWSa z CLI, boto, Ansiblem i libcloudem
ODP
Co powinieneś wiedzieć na temat devops?f
ODP
"Containers do not contain"
PDF
Git Submodules
ODP
Linux containers & Devops
PDF
Under the Dome (of failure driven pipeline)
PDF
Continuous Security in DevOps
ODP
About cultural change w/Devops
ODP
Orchestrating docker containers at scale (#DockerKRK edition)
ODP
Orchestrating docker containers at scale (PJUG edition)
PDF
Orchestrating Docker containers at scale
ODP
Ghost in the shell
ODP
Scaling and securing node.js apps
ODP
Node.js security
ODP
High Availability (HA) Explained - second edition
ODP
Monitoring with Nagios and Ganglia
PDF
Stop disabling SELinux!
ODP
RHEL/Fedora + Docker (and SELinux)
PDF
High Availability (HA) Explained
Docker 1.11
Programowanie AWSa z CLI, boto, Ansiblem i libcloudem
Co powinieneś wiedzieć na temat devops?f
"Containers do not contain"
Git Submodules
Linux containers & Devops
Under the Dome (of failure driven pipeline)
Continuous Security in DevOps
About cultural change w/Devops
Orchestrating docker containers at scale (#DockerKRK edition)
Orchestrating docker containers at scale (PJUG edition)
Orchestrating Docker containers at scale
Ghost in the shell
Scaling and securing node.js apps
Node.js security
High Availability (HA) Explained - second edition
Monitoring with Nagios and Ganglia
Stop disabling SELinux!
RHEL/Fedora + Docker (and SELinux)
High Availability (HA) Explained

Shall we play a game? PL version

  • 2. Czemu rekrutacja na OWASPie? ● Ponieważ ten system to webaplikacja ● Ponieważ bazuje w 100% na FOSS (open-source) ● Ponieważ security było dla nas bardzo istotne ● Bo na OWASPie spotykają się ludzie, którzy mają wpływ na procesy rekrutacji w innych firmach (hopefully) ;)
  • 3. Rekrutacja ● Sporo agencji / serwisów świadczących usługi rekrutacyjne ● Potencjalnie ogromna ilość kandydatów ● Procesowaniem kandydatów zajmuje się cały zespół ● Rozmowy i testy pochłaniają wiele czasu
  • 4. SysAdmin / Operations ● Jest administratorem, programistą, testerem i sieciowcem ● Performance tuning również nie jest mu obcy ● Odpowiada za krytyczne (wszystkie) dane ● Potrafi przenosić UPSy ;) ● O 4 nad ranem w niedzielę rozumie kolegów z innych krajów ;) ● Wszystko to robi w kontekście wysokiego bezpieczeństwa ● Lubi grać (znacie admina, który nie gra?) ;)
  • 5. Zagrajmy więc ● Pomysł na grę? Nie Quake / Diablo / Warcraft ;) ● pythonchallenge.com, wechall.net – CTFy są świetną formą ● trueability.com – taki event dla adminów ● Może więc coś w rodzaju CTFa / challenge? ● Taki system musiałby spełniać kilka wymogów: ● Optymalizacja czasu rekrutacji ● Zminimalizować ryzyko odrzucenia dobrego kandydata ● Być na tyle ciekawy aby przyciągał (kto nie lubi mindfscków)
  • 6. Let's start the ball rolling Zgłoszenie 1 etap – proste zadanie Problem: spora liczba kandydatów (>100) Cel: odsianie ludzi z innej bajki (80% odrzuceń!) 2 etap – tel/social.eng. Cel: poznanie, manipulacja 3 etap – challenge Global Thermonuclear War ;)
  • 7. 1 etap – telnetem przez SMTP RFC-821/1869: HELO/EHLO ??.....?? GPG us ur CV using http://..../gpg.asc Sporo nieznajomości GPG :( RTFM!
  • 8. 1 etap – telnetem przez SMTP RFC-821/1869: HELO/EHLO my.hostname 1 haczyk – hostname nie serwera a klienta (90% się złapała) GPG us ur CV using http://..../gpg.asc Sporo nieznajomości GPG :( RTFM!
  • 9. 1 etap – node.js ● Początkowo serwer w C. Po 3 w nocy jednak node.js ;) ● Co jest nie tak z node.js? ● ● http://osvdb.org/ - 2 trafienia ● http://1337day.com/, http://www.exploit-db.com/ - 1 trafienie ● ● http://seclists.org/bugtraq/ - 0 trafień https://nodesecurity.io/advisories - 4 trafienia Czy to oznacza, że node.js jest “bezpieczny”?
  • 10. Node.js – model działania - Event driven - Event loop - Callbacks - SPA, async, REST, Json http://magnetik.github.io/
  • 11. Node.js - zagrożenia ............................................________ ....................................,.-'"...................``~., .............................,.-"..................................."-., .........................,/...............................................":, .....................,?......................................................, .................../...........................................................,} ................./......................................................,:`^`..} .............../...................................................,:"........./ ..............?.....__.........................................:`.........../ ............./__.(....."~-,_..............................,:`........../ .........../(_...."~,_........"~,_....................,:`........_/ ..........{.._$;_......"=,_......."-,_.......,.-~-,},.~";/....} ...........((.....*~_......."=-._......";,,./`..../"............../ ...,,,___.`~,......"~.,....................`.....}............../ ............(....`=-,,.......`........................(......;_,,-" ............/.`~,......`-...................................../ .............`~.*-,.....................................|,./.....,__ ,,_..........}.>-._...................................|..............`=~-, .....`=~-,__......`,................................. ...................`=~-,,.,............................... ................................`:,,...........................`..............__ .....................................`=-,...................,%`>--==`` ........................................_..........._,-%.......` ● Brak logów ● Brak obsługi błędów - DoS ● Brak konfiguracji – “+” czy “-”? ● Brak filtrów sprawdzających user-input ● JS: function as a variable ● Evil eval(code). Server-side XSS ● setInterval(code,2), setTimeout(code,2), str = new Function(code) ● Moduły npm – kto i jak je tworzy?
  • 13. Node.js – evil eval() W ten oto sposób rozszerzyliśmy funkcjonalność o http://node.js/myurl
  • 14. Node.js - npm https://blog.nodejitsu.com/npm-innovation-through-modularity Przyrost ilości modułów npm Porównanie ilości modułów/day Node.js i innych technologii
  • 15. Node.js – jak żyć? ● Używajmy frameworków: https://npmjs.org/ - uważnie ● Moduły npm nie są validowane! Sprawdzajmy je: ● Uważajmy na zależności między modułami ● Własna obsługa logów i błędów – takie “must have” ● Skoro to jest serwer to potrzeba nam rozwiązań sec-server-side: https://nodesecurity.io ● Monitoring – twórzmy aplikacje myśląc o tym jak je monitorować ● Control-groups – ustalmy limity zasobów! (o tym zaraz...) ● SELinux sandbox (o tym zaraz)
  • 16. Node.js – SELinux sandbox ● Ustawiamy aplikacji 'home_dir' i 'tmp_dir' ● Aplikacja może domyślnie r/w z std(in|out) + defined FDs ● Domyślnie – brak dostępu do sieci ● Brak dostępu do nie swoich procesów / plików ● Sandboxa możemy spiąć z cgroupsami :) ● Pomocne: semodule -DB (no dontaudit) ● grep XXX /var/log/audit/audit.log | audit2allow -M node.sandbox ● semodule -i node.sandbox.pp
  • 18. Node.js – jak żyć #2 ● Freeze node.js version per project? ● Czytamy: ● https://media.blackhat.com/bh-us-11/Sullivan/BH_US_11_Sullivan_Server_Side_WP.pdf ● http://lab.cs.ttu.ee/dl91 ● https://github.com/toolness/security-adventure ● Pseudo–konfiguracja – ustalajmy limity w kodzie (np. POST size) ● try...catch ftw ● use strict; - pomaga nawet w sprawie evala (częściowo) ● Bunyan / dtrace: https://npmjs.org/package/bunyan ● A node.js OS? No i instalujmy node.js z paczek (fpm choćby)
  • 19. Etap 2 – social engineering ● Celem tego etapu jest weryfikacja i poznanie kandydata ● Christopher Hadnagy – SE framework (2k10): ● http://www.social-engineer.org/framework/Social_Engineering_Framework ● Każdy może się podać za rekrutera i zadzwonić do kandydata ● Budowanie profilu/znajomości na Linkedinie jest bardzo proste ● Zaufanie (lingo, znajomość tematu / środowiska: research) ● Administrator jest osobą ze sporą wiedzą – jest dobrym celem ● Wystarczy tylko zdobyć zaufanie i obniżyć poziom ostrożności
  • 20. Etap 3 - wirtualizacja ● Co nam potrzeba? ● Nadzór nad procesem bootowania ● Możliwość wpięcia się w konsolę ● Sterowanie zasobami ● Redundantny storage ● Tryb rescue dla obrazu VM ● Security by default > AWS > KVM/libvirt > XEN/libvirt > LXC
  • 21. Etap 3 - wirtualizacja boot konsola resources mgmt. redundant storage rescue VM security
  • 22. Etap 3 - wirtualizacja VS Wydajność XEN/HVM czy KVM?
  • 23. Etap 3 - wirtualizacja VS Wydajność XEN/HVM czy KVM? Z XEN/HVM mieliśmy problemy wydajnościowe – spore. Tutaj wygrywa czerwony kapelusz i jego PV (jednak z pomocą cgroups – KVM przy sporym obciążeniu zachowuje się niestabilnie)
  • 24. Etap 3 – bezpieczeństwo sieci https://en.wikipedia.org DMZ (Demilitarized Zone) – wydzielona część sieci zawierająca usługi, które są wystawione bezpośrednio na świat i są też najbardziej zagrożone atakami. Podział logiczny (VLANy) lub fizyczny
  • 25. Etap 3 – bezpieczeństwo sieci https://en.wikipedia.org DMZ (Demilitarized Zone) – wydzielona część sieci zawierająca usługi, które są wystawione bezpośrednio na świat i są też najbardziej zagrożone atakami. Podział logiczny (VLANy) lub fizyczny
  • 26. Etap 3 – bezpieczeństwo sieci ● Wydzielony DMZ (VLAN?) dla hosta ● Brak routingu / komunikacji tej DMZ z resztą ● Tanie rozwiązania? ● OpenWRT / DDWRT way || Pure Linux server ● 802.1Q – VLANy
  • 27. Etap 3 – bezpieczeństwo sieci ● Izolacja sieci na hoście KVM: ● Host/network bridge: switch warstwy 2 ● netfilter / nwfilter (IBM) ● domyślnie nie mamy izolacji pakietów dla VM w bridge'u – ebtables null, no filtering ● ebtables – filtrowanie warstwy 2 – w ten sposób załatwiamy izolację ● Albo virsh nwfilter-list ● allow-arp,dhcp,dhcp-server,clean-traffic, noarp-ip-spoofing, no-arp-mac-spoofing, noarp-spoofing, no-ip-multicast, no-ip-spoofing, no-mac-broadcast, no-mac-spoofing, noother-l2-traffic ● L2 filtering? /proc/sys/net/bridge https://www.redhat.com/archives/libvir-list/2010-June/msg00762.html http://pic.dhe.ibm.com/infocenter/lnxinfo/v3r0m0/topic/liaat/liaatsecurity_pdf.pdf
  • 28. Etap 3 – proces bootowania, VNC ● Dostęp do procesu bootowania – VNC ● Bezpieczeństwo VNC? SSL? Komplikacje.. ● A gdyby tak VNC over SSH tunnel? ● Jest szyfrowanie ● Żadnej zabawy z certami ● Każdy z nas to już robił...
  • 29. Etap 3 – restricted shells ● Tunel SSH wymaga konta SSH (thank You Captain Obvious!) ● A za pomocą konta shellowego można sporo nabroić... ● Ograniczmy więc możliwe akcje użytkownika – restricted shells Restricted shells wg. Google ;) =>
  • 30. Etap 3 – restricted shells ● Restricted shells są groźne – trzeba rozumieć jak działają! ● W sprzyjających warunkach można uciec z rshella: https://en.wikipedia.org/wiki/Rbash
  • 31. Etap 3 – restricted shells ● Rbash: ● Jest w CentOSie / RHEL jako legit ;) ● Zabrania trawersować katalogi ● Zabrania używac bezpośrednich ścieżek do plików / katalogów (takich z '/') ● Zabrania ustawiać PATH czy inną zmienną powłoki ● Zabrania przekierowywać output komend ● PATH=$HOME/bin – i niech tam będzie prawie pusto! https://en.wikipedia.org/wiki/Rbas h
  • 32. Etap 3 – SSH tunnel / VNC ● We must go deeper! VM host VM-Proxy rshell / ibsh rshell / rbash Kandydat VNC server screen / ssh tunnel
  • 33. Etap 3 – restricted shells ● Inne shelle: ● rssh – zezwala na wykonywanie scp, sftp, rsync itd ● sudosh - http://sourceforge.net/projects/sudosh ● ● Pozwala określać jakie operacja są dozwolone dla usera ● ● Pozwala zapisywać całą sesję użytkownika i ją odtwarzać Trochę outdated – lepiej sudosh3 Ibsh (small, fast, secure): http://sourceforge.net/projects/ibsh/
  • 34. Etap 3 – control groups ● zarządzanie zasobami w prosty sposób (ulimits, nice, limits.conf) ● Potraficie przypisać 50 IOPS dla dowolnego procesu? ● A może limit 100Kbp/s dla wybranego usera? ● Problemy z memory–leakami w Javie?
  • 35. Etap 3 – control groups https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html ● ● ● Debian & RHEL friendly Można uruchamiać aplikacje w kontekście cgroupy Można żyjący proces przypisać do konkretnej cgroupy
  • 36. Etap 3 – webaplikacja ● OpenStack? Trochę komplikacji. “Out of the box” tylko w internetach widzieli. A zrób to wydajnie i bezpiecznie w kilka godzin ;)
  • 37. Etap 3 – webaplikacja Commodore OS ???
  • 38. Etap 3 – webaplikacja Commodore OS Vision FTW!
  • 39. Etap 3 – webaplikacja ● Apache + mod_security ● mod_security + OWASP rules ● PHP & Python :) ● Prostota! ● Sterowanie VM za pomocą screena i prostego pseudo – demona: ● ● while(1) do: zarządzaj_VMkami(); I to po prostu działa!
  • 40. Etap 3 – nagrywanie sesji SSH ● Nagrywanie każdej sesji (tak, również screen) ● Nagrywanie real-time (a nie flush co jakiś czas) ● sudosh3 (fork sudosh) – powłoka pośrednicząca ● auditd – niskopoziomowe narzędzie logujące wybrane syscalle ● Asciinema (ascii.io, Marcin Kulik) – super, ale nie jako “audit” ● Ttyrec – outdated: http://0xcc.net/ttyrec/index.html.en ● Ssh logging patch - outdated: http://www.kdvelectronics.eu/ssh-logging/ssh-logging.html
  • 41. Etap 3 – bezpieczeństwo danych ● Gdyby tak stracić choć jedną VMkę... brr. ● Ocena ryzyka – co nam wystarcza? ● RAID1 / Mirror – “zazwyczaj” w skali kwartału wystarcza ● Backupy – przydatne ;) RAID / replikacja to nie backup... ● GlusterFS / DRBD – jeśli tylko mamy na to zasoby to polecam :) KVM active host KVM passive host LVM LVM replikacja Gluster brick Gluster brick