SlideShare a Scribd company logo
1 of 25
Download to read offline
@kubabrecka
www.kubabrecka.com
Jak moc je důležité, aby
programátor uměl…
ž  Objektově-orientované programování
ž  Funkcionální programování
ž  Překladače, teorie automatů
ž  Složitost
ž  Databáze
ž  Sítě
ž  UI/UX
ž  Reverzní inženýrství
Ale vlastně…
ž  …pojďme se podívat, jak hluboko vede
králičí nora
ž  Pokusím se zodpovědět některé trochu
tabuizované otázky
—  privátní API
—  validace, review
—  binární podoba, šifrování aplikace
—  některé bezpečnostní důsledky
Co je cílem
ž  Ukázat
—  co s vaší aplikací zmůže Apple
—  co je vidět v binárce
—  co lze dělat s jailbreaknutým zařízením
—  kde se berou “cracknuté” aplikace
—  co dovede dostatečně odhodlaný “black hat”
ž  Ne: porušovat zákon
ž  Disclaimer: pouze pro výukové účely
ž  Disclaimer 2: rozhodně nejsem security
expert, jen se rád hrabu v kódu
Sandbox
ž  Každá aplikace má svůj sandbox
—  vidí svůj adresář + některé systémové
—  pro zápis má jen předem určené adresáře
ž  Nemá smysl mít file managery
ž  Přenos souborů mezi aplikacemi ad-hoc
Jailbreak
ž  Vypnutá kontrola podpisů u aplikací
ž  Zrušený sandbox
—  čtení i zápis kamkoliv do filesystemu (!)
ž  Vypne ASLR
ž  Zruší blokování syscallů
—  fork, exec, …
ž  Debugging, attach to process
ž  Cydia
ž  tethered (snadno), untethered (horko
těžko)
—  jailbreakaři si šetří vulnerability do foroty
Jailbreak iOS 6.1 – evasi0n
ž  http://theiphonewiki.com/wiki/Evasi0n
Privátní API
ž  Hlavičkové soubory v Xcode jsou
“osekané”
—  řada skrytých tříd i metod
—  důvod
○  zveřejněné API je pro Apple závazné a musí ho
podporovat
○  Apple si chce nechat možnost měnit vnitřnosti
ž  Class-dump
—  http://stevenygard.com/projects/class-dump/
—  https://github.com/nst/iOS-Runtime-Headers
—  vyextrahuje z binárky všechny třídy a metody
Method swizzling
ž  Všechny selektory se volají přes dynamický
dispatch
—  lze nahradit metodu změnou záznamu v
tabulkách metod
—  http://darkdust.net/writings/objective-c/method-
swizzling
- (BOOL)swizzled_synchronize {	
...	
[self swizzled_synchronize];	
...	
}	
	
+ (void)load {	
Method original = class_getInstanceMethod(self, @selector(synchronize));	
Method swizzled = class_getInstanceMethod(self, @selector(swizzled_synchronize));	
method_exchangeImplementations(original, swizzled);	
}
Validace aplikace
ž  Co se přesně posílá do Applu?
—  Zkompilovaná binárka pro ARMv6 (?),
ARMv7, ARMv7s
—  Ne: zdrojový kód, binárka pro simulátor
ž  Co se s aplikací děje při validaci?
—  kontrola některých náležitostí aplikace
○  ikona, profil, plist, …
—  kontrola privátního API
Review aplikace
ž  Co se s aplikací děje při review?
—  Oficiální informace: pouze nicneříkající App Store Review
Guidelines
—  <spekulace>
○  zdaleka ne tolik testování, kolik si myslíte
○  nemají zdrojový kód
○  validace + automatizované testy
—  zátěz CPU, baterie
○  manuální testy
—  jestli aplikace jde spustit, jestli alespoň něco dělá
—  nezkoušejí všechny funkce aplikace
○  jednotlivé týmy se chovají dost jinak
○  těžko zjistitelné porušení podmínek se řeší “ex post”
—  až když je aplikace dostatečně populární, aby to někoho zajímalo
—  </spekulace>
FairPlay a šifrování aplikací
ž  Aplikace z App Store jsou šifrované
—  jen binárka, navíc po jednotlivých sekcích
# otool -arch all -Vl ...	
cmd LC_ENCRYPTION_INFO	
cmdsize 20	
cryptoff 4096	
cryptsize 724992	
cryptid 1	
ž  Zachované importy
ž  Kernel při zavedení binárky ověří podpis a
dešifruje v paměti
Šifrovaná binárka
Kde vzít dešifrovanou binárku
ž  Různě po Internetu v souborech .ipa
—  AppTrackr a spol.
—  iReSign
ž  A když není k mání?
—  V podstatě jediná metoda je extrakce z
jailbreaknutého zařízení
○  spustíte aplikaci v gdb, zastavíte a dumpnete
dešifrovanou paměť
Pro srovnání – Android
ž  Java, Dalvik, Dalvik VM, .apk soubory
—  bajtkód (.dex)
—  nástroj dex2jar z něj udělá běžné .class soubory
—  poté stačí použít libovolný nástroj pro
dekompilaci Javy (je jich spousta)
ž  Kde získat .apk?
—  na Internetu
—  přímo ze zařízení
○  obvykle v tom nic nebrání, případně rootnout
ž  Ochrana: obfuskace
—  ale její účinnost je přinejmenším sporná
Realita
ž  Získat .ipa nebo .apk je snadné
ž  Získat informace z binárky je
—  Android – při obfuskaci středně obtížné
○  ale je to Java, snadno se dekompiluje
—  iOS – obvykle středně snadné, protože jsou
téměř vždy k dispozici kompletní názvy metod a
tříd
○  ale je to ARM assembly
ž  Upravit binárku je
—  Android – snadné
—  iOS – obtížné
Hackerův toolbox
ž  IDA 6.3
—  Podpora pro Obj-C
—  Demo verze pro Mac
○  x86 + ARM
ž  iFunBox
—  Free
—  používá iTunesí knihovny (ale na černo)
ž  Charles – Web Debugging Proxy
Application
—  http://www.charlesproxy.com/, $50
IDA
ž  vynikající disassembler
—  ale hlavně mnohem víc
—  kompletní analýza binárky
—  dekompiler Hex-Rays ($$$)
ž  podpora Objective-C, ARM
Network intercepting
ž  Charles Proxy
—  http://charlesproxy.com/
—  přehledné sledování všech spojení
○  parsuje JSON, XML, …
ž  Settings – Wi-Fi – (network) – HTTP Proxy
– Manual
—  veškerý provoz je pak veden přes Charlese
ž  SSL
—  Charles má vygenerovaný kořenový certifikát
○  charles.crt, nainstalovat do zařízení
—  http://charlesproxy.com/charles.crt
○  pak funguje jako man-in-the-middle
Co proti tomu dělat?
ž  Krátká odpověď: nic
ž  Dlouhá odpověď:
—  drtivá většina ochran je “security by
obscurity”, prolomení je jen otázkou
dostatečného odhodlání útočníka
—  vyplatí se realistický přístup místo
paranoidního
○  co nejhoršího se může stát?
Tipy a triky
ž  Chcete vědět, jak něco funguje?
—  Tak se podívejte!
—  /Applications/Xcode.app/Contents/Developer/Platforms/
iPhoneSimulator.platform/Developer/SDKs/
iPhoneSimulator6.1.sdk/System/Library/Frameworks/
○  UIKit, QuartzCore, Foundation, CoreGraphics,
CoreFoundation, …
ž  Nemějte falešné představy o
bezpečnosti
—  Viz iFunBox
Otázky?
Děkuji za pozornost.
Kuba Břečka
@kubabrecka
www.kubabrecka.com
Dark Side of iOS [mDevCamp 2013]

More Related Content

Similar to Dark Side of iOS [mDevCamp 2013]

Softwarove protektory / KAREL LEJSKA, MILAN BARTOŠ [DEFENDIO]
Softwarove protektory / KAREL LEJSKA, MILAN BARTOŠ [DEFENDIO]Softwarove protektory / KAREL LEJSKA, MILAN BARTOŠ [DEFENDIO]
Softwarove protektory / KAREL LEJSKA, MILAN BARTOŠ [DEFENDIO]Security Session
 
mDevCamp 2013 - Bezpečnost mobilního bankovnictví
mDevCamp 2013 - Bezpečnost mobilního bankovnictvímDevCamp 2013 - Bezpečnost mobilního bankovnictví
mDevCamp 2013 - Bezpečnost mobilního bankovnictvíPetr Dvorak
 
Product API in MallGroup
Product API in MallGroupProduct API in MallGroup
Product API in MallGroupJan Blaško
 
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Ondřej Machulda
 
Odpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnostOdpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnostchaplin06
 
Noční můry webového vývojáře
Noční můry webového vývojářeNoční můry webového vývojáře
Noční můry webového vývojářeMichal Špaček
 
Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automationOndřej Machulda
 
Optimalizace Symfony na devu
 Optimalizace Symfony na devu Optimalizace Symfony na devu
Optimalizace Symfony na devuVašek Purchart
 
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)Péhápkaři
 
Bezpečnost otevřených a uzavřených řešení - Martin Mačok, bezpečnostní analytik
Bezpečnost otevřených a uzavřených řešení - Martin Mačok, bezpečnostní analytikBezpečnost otevřených a uzavřených řešení - Martin Mačok, bezpečnostní analytik
Bezpečnost otevřených a uzavřených řešení - Martin Mačok, bezpečnostní analytikTUESDAY Business Network
 
Závislosti, injekce a vůbec
Závislosti, injekce a vůbecZávislosti, injekce a vůbec
Závislosti, injekce a vůbecDavid Grudl
 
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheelsDEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheelsCtvrtkoncz
 
Vilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycleVilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycleCtvrtkoncz
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Railsigloonet
 
ORM Designer: Speed up your ORM development
ORM Designer: Speed up your ORM developmentORM Designer: Speed up your ORM development
ORM Designer: Speed up your ORM developmentBrnoPHP
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduJan Kodera
 
Prezentace - základy bezpečnosti
Prezentace - základy bezpečnostiPrezentace - základy bezpečnosti
Prezentace - základy bezpečnostiBrilo Team
 
Kontinuální integrace pomocí nástrojů Atlassian
Kontinuální integrace pomocí nástrojů AtlassianKontinuální integrace pomocí nástrojů Atlassian
Kontinuální integrace pomocí nástrojů AtlassianOnlio
 
Bezpečnost otevřených a uzavřených řešení (Martin Mačok)
Bezpečnost otevřených a uzavřených řešení (Martin Mačok)Bezpečnost otevřených a uzavřených řešení (Martin Mačok)
Bezpečnost otevřených a uzavřených řešení (Martin Mačok)DCIT, a.s.
 
Smart Cards & Devices Forum 2013 - Zabezpečení mobilních bankovnictví
Smart Cards & Devices Forum 2013 - Zabezpečení mobilních bankovnictvíSmart Cards & Devices Forum 2013 - Zabezpečení mobilních bankovnictví
Smart Cards & Devices Forum 2013 - Zabezpečení mobilních bankovnictvíOKsystem
 

Similar to Dark Side of iOS [mDevCamp 2013] (20)

Softwarove protektory / KAREL LEJSKA, MILAN BARTOŠ [DEFENDIO]
Softwarove protektory / KAREL LEJSKA, MILAN BARTOŠ [DEFENDIO]Softwarove protektory / KAREL LEJSKA, MILAN BARTOŠ [DEFENDIO]
Softwarove protektory / KAREL LEJSKA, MILAN BARTOŠ [DEFENDIO]
 
mDevCamp 2013 - Bezpečnost mobilního bankovnictví
mDevCamp 2013 - Bezpečnost mobilního bankovnictvímDevCamp 2013 - Bezpečnost mobilního bankovnictví
mDevCamp 2013 - Bezpečnost mobilního bankovnictví
 
Product API in MallGroup
Product API in MallGroupProduct API in MallGroup
Product API in MallGroup
 
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
 
Odpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnostOdpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnost
 
Noční můry webového vývojáře
Noční můry webového vývojářeNoční můry webového vývojáře
Noční můry webového vývojáře
 
Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automation
 
Optimalizace Symfony na devu
 Optimalizace Symfony na devu Optimalizace Symfony na devu
Optimalizace Symfony na devu
 
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
 
Bezpečnost otevřených a uzavřených řešení - Martin Mačok, bezpečnostní analytik
Bezpečnost otevřených a uzavřených řešení - Martin Mačok, bezpečnostní analytikBezpečnost otevřených a uzavřených řešení - Martin Mačok, bezpečnostní analytik
Bezpečnost otevřených a uzavřených řešení - Martin Mačok, bezpečnostní analytik
 
Závislosti, injekce a vůbec
Závislosti, injekce a vůbecZávislosti, injekce a vůbec
Závislosti, injekce a vůbec
 
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheelsDEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
 
Vilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycleVilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycle
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Rails
 
ORM Designer: Speed up your ORM development
ORM Designer: Speed up your ORM developmentORM Designer: Speed up your ORM development
ORM Designer: Speed up your ORM development
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí cloudu
 
Prezentace - základy bezpečnosti
Prezentace - základy bezpečnostiPrezentace - základy bezpečnosti
Prezentace - základy bezpečnosti
 
Kontinuální integrace pomocí nástrojů Atlassian
Kontinuální integrace pomocí nástrojů AtlassianKontinuální integrace pomocí nástrojů Atlassian
Kontinuální integrace pomocí nástrojů Atlassian
 
Bezpečnost otevřených a uzavřených řešení (Martin Mačok)
Bezpečnost otevřených a uzavřených řešení (Martin Mačok)Bezpečnost otevřených a uzavřených řešení (Martin Mačok)
Bezpečnost otevřených a uzavřených řešení (Martin Mačok)
 
Smart Cards & Devices Forum 2013 - Zabezpečení mobilních bankovnictví
Smart Cards & Devices Forum 2013 - Zabezpečení mobilních bankovnictvíSmart Cards & Devices Forum 2013 - Zabezpečení mobilních bankovnictví
Smart Cards & Devices Forum 2013 - Zabezpečení mobilních bankovnictví
 

Dark Side of iOS [mDevCamp 2013]

  • 1.
  • 3. Jak moc je důležité, aby programátor uměl… ž  Objektově-orientované programování ž  Funkcionální programování ž  Překladače, teorie automatů ž  Složitost ž  Databáze ž  Sítě ž  UI/UX ž  Reverzní inženýrství
  • 4. Ale vlastně… ž  …pojďme se podívat, jak hluboko vede králičí nora ž  Pokusím se zodpovědět některé trochu tabuizované otázky —  privátní API —  validace, review —  binární podoba, šifrování aplikace —  některé bezpečnostní důsledky
  • 5. Co je cílem ž  Ukázat —  co s vaší aplikací zmůže Apple —  co je vidět v binárce —  co lze dělat s jailbreaknutým zařízením —  kde se berou “cracknuté” aplikace —  co dovede dostatečně odhodlaný “black hat” ž  Ne: porušovat zákon ž  Disclaimer: pouze pro výukové účely ž  Disclaimer 2: rozhodně nejsem security expert, jen se rád hrabu v kódu
  • 6. Sandbox ž  Každá aplikace má svůj sandbox —  vidí svůj adresář + některé systémové —  pro zápis má jen předem určené adresáře ž  Nemá smysl mít file managery ž  Přenos souborů mezi aplikacemi ad-hoc
  • 7. Jailbreak ž  Vypnutá kontrola podpisů u aplikací ž  Zrušený sandbox —  čtení i zápis kamkoliv do filesystemu (!) ž  Vypne ASLR ž  Zruší blokování syscallů —  fork, exec, … ž  Debugging, attach to process ž  Cydia ž  tethered (snadno), untethered (horko těžko) —  jailbreakaři si šetří vulnerability do foroty
  • 8. Jailbreak iOS 6.1 – evasi0n ž  http://theiphonewiki.com/wiki/Evasi0n
  • 9. Privátní API ž  Hlavičkové soubory v Xcode jsou “osekané” —  řada skrytých tříd i metod —  důvod ○  zveřejněné API je pro Apple závazné a musí ho podporovat ○  Apple si chce nechat možnost měnit vnitřnosti ž  Class-dump —  http://stevenygard.com/projects/class-dump/ —  https://github.com/nst/iOS-Runtime-Headers —  vyextrahuje z binárky všechny třídy a metody
  • 10. Method swizzling ž  Všechny selektory se volají přes dynamický dispatch —  lze nahradit metodu změnou záznamu v tabulkách metod —  http://darkdust.net/writings/objective-c/method- swizzling - (BOOL)swizzled_synchronize { ... [self swizzled_synchronize]; ... } + (void)load { Method original = class_getInstanceMethod(self, @selector(synchronize)); Method swizzled = class_getInstanceMethod(self, @selector(swizzled_synchronize)); method_exchangeImplementations(original, swizzled); }
  • 11. Validace aplikace ž  Co se přesně posílá do Applu? —  Zkompilovaná binárka pro ARMv6 (?), ARMv7, ARMv7s —  Ne: zdrojový kód, binárka pro simulátor ž  Co se s aplikací děje při validaci? —  kontrola některých náležitostí aplikace ○  ikona, profil, plist, … —  kontrola privátního API
  • 12. Review aplikace ž  Co se s aplikací děje při review? —  Oficiální informace: pouze nicneříkající App Store Review Guidelines —  <spekulace> ○  zdaleka ne tolik testování, kolik si myslíte ○  nemají zdrojový kód ○  validace + automatizované testy —  zátěz CPU, baterie ○  manuální testy —  jestli aplikace jde spustit, jestli alespoň něco dělá —  nezkoušejí všechny funkce aplikace ○  jednotlivé týmy se chovají dost jinak ○  těžko zjistitelné porušení podmínek se řeší “ex post” —  až když je aplikace dostatečně populární, aby to někoho zajímalo —  </spekulace>
  • 13. FairPlay a šifrování aplikací ž  Aplikace z App Store jsou šifrované —  jen binárka, navíc po jednotlivých sekcích # otool -arch all -Vl ... cmd LC_ENCRYPTION_INFO cmdsize 20 cryptoff 4096 cryptsize 724992 cryptid 1 ž  Zachované importy ž  Kernel při zavedení binárky ověří podpis a dešifruje v paměti
  • 15. Kde vzít dešifrovanou binárku ž  Různě po Internetu v souborech .ipa —  AppTrackr a spol. —  iReSign ž  A když není k mání? —  V podstatě jediná metoda je extrakce z jailbreaknutého zařízení ○  spustíte aplikaci v gdb, zastavíte a dumpnete dešifrovanou paměť
  • 16. Pro srovnání – Android ž  Java, Dalvik, Dalvik VM, .apk soubory —  bajtkód (.dex) —  nástroj dex2jar z něj udělá běžné .class soubory —  poté stačí použít libovolný nástroj pro dekompilaci Javy (je jich spousta) ž  Kde získat .apk? —  na Internetu —  přímo ze zařízení ○  obvykle v tom nic nebrání, případně rootnout ž  Ochrana: obfuskace —  ale její účinnost je přinejmenším sporná
  • 17. Realita ž  Získat .ipa nebo .apk je snadné ž  Získat informace z binárky je —  Android – při obfuskaci středně obtížné ○  ale je to Java, snadno se dekompiluje —  iOS – obvykle středně snadné, protože jsou téměř vždy k dispozici kompletní názvy metod a tříd ○  ale je to ARM assembly ž  Upravit binárku je —  Android – snadné —  iOS – obtížné
  • 18. Hackerův toolbox ž  IDA 6.3 —  Podpora pro Obj-C —  Demo verze pro Mac ○  x86 + ARM ž  iFunBox —  Free —  používá iTunesí knihovny (ale na černo) ž  Charles – Web Debugging Proxy Application —  http://www.charlesproxy.com/, $50
  • 19. IDA ž  vynikající disassembler —  ale hlavně mnohem víc —  kompletní analýza binárky —  dekompiler Hex-Rays ($$$) ž  podpora Objective-C, ARM
  • 20.
  • 21. Network intercepting ž  Charles Proxy —  http://charlesproxy.com/ —  přehledné sledování všech spojení ○  parsuje JSON, XML, … ž  Settings – Wi-Fi – (network) – HTTP Proxy – Manual —  veškerý provoz je pak veden přes Charlese ž  SSL —  Charles má vygenerovaný kořenový certifikát ○  charles.crt, nainstalovat do zařízení —  http://charlesproxy.com/charles.crt ○  pak funguje jako man-in-the-middle
  • 22. Co proti tomu dělat? ž  Krátká odpověď: nic ž  Dlouhá odpověď: —  drtivá většina ochran je “security by obscurity”, prolomení je jen otázkou dostatečného odhodlání útočníka —  vyplatí se realistický přístup místo paranoidního ○  co nejhoršího se může stát?
  • 23. Tipy a triky ž  Chcete vědět, jak něco funguje? —  Tak se podívejte! —  /Applications/Xcode.app/Contents/Developer/Platforms/ iPhoneSimulator.platform/Developer/SDKs/ iPhoneSimulator6.1.sdk/System/Library/Frameworks/ ○  UIKit, QuartzCore, Foundation, CoreGraphics, CoreFoundation, … ž  Nemějte falešné představy o bezpečnosti —  Viz iFunBox
  • 24. Otázky? Děkuji za pozornost. Kuba Břečka @kubabrecka www.kubabrecka.com