How .NET Apps Get Hacked?
Тодор Тодоров (Senior Software Engineer; лидер на OWASP Sofia Chapter)
Лекция за често допускани грешки при писане на .NET код, които водят до пробиви — хеширане на пароли с MD5, връщане на пароли навън от приложението и command injection. Лекторът показва примери какво не трябва да се прави, включително в код, генериран от LLM, и представя дейността на OWASP Sofia Chapter.
Описание
🟪 DEV.BG .NETworking Conference 2026 🟪 https://www.events.dev.bg/dotnet/2026
👉 Лектор: Тодор Тодоров
👉 Тема: How .NET Apps Get Hacked?
👉 Презентация: https://d.dev.bg/2p8tutck
Описанието е на DEV.BG.
Препис
Автоматичен препис — може да съдържа грешки — сверявайте с видеото, преди да цитирате.
Клик върху времето пуска видеото от този момент.
↗й [музика]
↗здравейте.
↗Много се радвам, че съм тук. За втори
Покажи целия препис — още 906 абзаца (~5426 думи)
↗път говоря на Dot Networking и винаги
↗съм супер ейтед, защото хората, които
↗идват тука, са много готини, много
↗хайпнати и въобще абе донес сцената.
↗Обикновено са готини хора.
↗Та за какво ще си говорим днес? Си
↗говорим малко за това как пишем кода
↗така, че да ни хакнат.
↗Тоест ще ви покажа какво не трябва да
↗правите и със сигурност го правите.
↗Сигурност и аз го правя. Още по-сигурно
↗е, че LLM и AI го правят, което е много
↗модерно, нали, в последно време. Сега в
↗моята лекция няма да си говорим толкова
↗много за AI. Не съм модерен, аз съм олд
↗scholл. Ще говорим за писането на код на
↗ръка. Помните ли го това от едно време,
↗от миналата година?
↗Та ще си говорим за писането на код на
↗ръка и поправянето на код на ръка, което
↗всъщност ни трябва много заради кода,
↗който лмиите пишат. Тъй че за да може да
↗знаем какви глупости правят от време на
↗време. Така.
↗Първо, стандартният слайд малко за мен,
↗да знаете защо съм тук и за какво се
↗боря. Казвам се Торо Тодоров. Както
↗споменаха, съм синиър софтуер инженер в
↗Phoтър
↗лидер на Olasp Sofia Chapter. А някой от
↗вас идвал ли е на нашите митъпи?
↗Много малко хора. Виждам тука една-две
↗ръце. Това трябва да се промени. Имаме
↗тъп. Ще видите накрая кога, къде.
↗Безплатно е. Готино е. Си говорим за
↗cyбер secкюрити, си говорим за хакване,
↗всякакви такива неща. Елате.
↗Не знам всичките дали ще има къде да ви
↗поберем, ама колкото дойдете все ще
↗измислим как. Пица ще намерим за всички.
↗Занимавам се с пуб спикинг от доста
↗години вече.
↗Изложиха ме, че съм дърт и че имам над
↗20 години опит в сферата. А комюниity
↗supporter съм. Имаме hacker.bg едно cy
↗security community, където имаме Discord
↗сървър и хора като нас събират там да си
↗говорят, обменят опит. обменят а някои
↗не толкова легални работи от време на
↗време може би, но това дисклеймър и а да
↗и съм голям поддръжник на open source.
↗Имам даже собствена библиотечка. Никой
↗никога не я е ползвал, обаче седи там в
↗GitHub. Поддържам си я от време на
↗време.
↗А да може да я видите. Dnet е между
↗другото.
↗Та,
↗понеже нали securю allasp, някой знае ли
↗какво значи all?
↗Сега сигурно ще кажат повечето хора в
↗тоя момент обикновено казват open source
↗web application open. Да, ама е
↗worldwide application
↗security project. Това е нонпрофит
↗организация, световен мащаб, която се
↗занимава с това да разпространява знание
↗и безплатни инструменти за подпомагане
↗наберcюрити и на cyберcюрити обществото
↗като цяло. И те поддържат такивал
↗чаптери, както е София chapter, които
↗организират локални митъпи, където
↗събират напълно безплатно хора, всякакви
↗хора, не само cyберcюрити хора, не само
↗cyберcютиity инженери, девелопъри като
↗вас, мениджъри, pми, всякакви могат да
↗идват и е добре да идват. Ще си
↗поговорим и за това малко по-натам.
↗Та OL ASP имат едно от най-популярните
↗неща, които правят е всяка година
↗а курират един такъв списък, рейтват
↗един такъв списък от OL ASP Топ 10. А
↗това е списъкът за 2025, защото те
↗обикновено по-към края на годината
↗изкарват за тази година какво е било.
↗Така че найлетест списък е за 2025 и той
↗показва кои са 10-те топ
↗найексплоатирани
↗и популярни ворабилитита в апликациите в
↗световен мащаб, което показва какво
↗означават те и как да се предпазим от
↗тях. И затова днешната лекция ще говорим
↗за тях. Понеже са 10, нямаме толкова
↗много време. Аз искам да покажа доста
↗демо и доста код какво представлява и
↗как изглежда. Затова ще си поговорим за
↗пет неща. Пет от тях. Шест технически,
↗защото след тях има още едно. Ще ви го
↗покажа, но за тези ще си поговорим
↗първо.
↗Като създал съм един проект, след малко
↗ще го видите, който ще бъде качен в
↗GitHub. Той вече е качен, а още не е
↗публично репото.
↗Мислех да направя уау ефект, да го
↗направя публично накрая на
↗презентацията, обаче съм си оставилкия,
↗няма може да го случи, ама ще бъде
↗после, няма значение. А та ще си
↗поговорим сега за тия пет неща. Ще ви
↗покажа демо какво представляват и
↗горе-долу какво не трябва да правите в
↗тия пет ситуации. И затова ще почнем с
↗първото, което е broken access control и
↗без without further duwe. Направо
↗отиваме към кода и към демото. Така.
↗Ето тука това е апликацийката, която съм
↗направил [прочиства си гърлото]
↗под направо, разбирайте. Изкодихме я с
↗AI
↗сега
↗[смях]
↗правилно агилти
↗може да се познае тука по папките, които
↗се намират. А та [прочиства си гърлото]
↗нали има Secure Wр бла бла бла бла бла
↗бла. А по по-интересното, нали, както
↗каза и лектора преди мен, като видите
↗как е структуриран кодът, ви става ясно,
↗че е писан от AI. Кой пише такъв код,
↗толкова подреден с толкова много
↗коментари и така нататък, но това е
↗просто една уеб апликацийка, между
↗другото. А тука ще вметна набързо, че
↗OLAS поддържат и такова нещо. Нарича се
↗OLASP Gold. Last Gold е а преднамерено
↗vulnerable апликация, която всеки може
↗да си ръне в контейнеър, която показва
↗всичките топ 10 плюс
↗допълнителнирабилитита.
↗А тя не е дотнецка, но въпреки това с
↗върху нея може да се опитвате да хаквате
↗и да експлоатирате тези
↗vulnerнерабилитита. Та тя е направена с
↗цел обучение. А та това, което аз съм
↗направил нещо подобно, само че е
↗доnetско.
↗И сега ще го пуснем, за да можем да
↗видим.
↗Е,
↗къде сме? А,
↗аре.
↗Така.
↗Ето го. Warning,
↗vulnerable, бла-бла бла. Отново не съм
↗ги направил аз тия неща.
↗Така. А кой беше адресът? Четири осмици.
↗[хърка]
↗Даже има.
↗Трябва да има и слагър
↗или слагаът беше на главната.
↗Да. Та да. Това са pointчета за всичките
↗различни vulnerрабилитита, като има а
↗vulnerable end point, има и secureer
↗point. показва две две две двата
↗варианта. Ние обаче няма да използваме
↗слагаъра, защото той е много такъв
↗for noops. Ние ще използваме
↗аа ето това. Не знам дали сте го
↗виждали. Това е такъв hht htp файл. Това
↗е много готин начин за
↗с текст да си описвате. Това е такова
↗HTP клиентче, нещо като много лекотена
↗версия на
↗а на подобни
↗като Postman и така нататък софтуери. Та
↗ей тука сега ще започнем първото, което
↗ни е а този broken access control. Значи
↗какъв е тоя broken access control? Всеки
↗един от endpint има get info. Всеки един
↗от контролерите има get info end point,
↗който ви показва линка за оasпа какво
↗представлява. Това няма да го
↗разглеждаме. Може да си го видите после
↗след това, но идеята тука е, че примерно
↗имаме някакъв някаква система, която
↗връща поръчки,
↗нали, по ID и аз съм а потребителя,
↗хардкоднатия потребител 2 Алис.
↗И тука мога да викна
↗някакъв order. Цак send request. Ето
↗връщаме и vulnerable. Само че това е без
↗никакъв
↗без никаква проверка. Отивам да проверя
↗друг ордър. Също мога. Той не е за Алис,
↗обаче ми се връща.
↗Ето този е за Алис. Този е за боб. Обаче
↗идва, защото аз просто това често пъти
↗го правят хората.
↗Имаме си някакъв контролер, подаваме му
↗някакъв път параметър, за да си вземем
↗нещата, обаче не проверяваме. Той USърде
↗го вика кой е. И сега да вие ще кажете,
↗ама то ние сме свикнали, нали, слагаме
↗си декораторите отгоре. Декорато, да
↗слагаме си декораторите отгоре. Всичко
↗вика работи. Dnet ни го дава. Обаче
↗много често се случва, което ми е
↗направило впечатление, когато работим
↗само модерно микросървисни архитектури и
↗ние имаме нашия сървис, който е някъде
↗по-навътре в микросървисната ни
↗платформа и понеже знам, че пред мен
↗стои някакъв друг сървис публичен, аз не
↗проверявам тоя юзър кой е, защото той е
↗проверил вместо мен.
↗И много пъти се изпускат тия неща
↗навътре. Уж им за бързо действие, ужм за
↗не знам какво. А това е грешно. Не го
↗правете. Винаги проверявайте навсякъде
↗всичко, колкото и да ви коста това като
↗performanceс според мен.
↗Но ето тия са vulnerable. Така. И тука
↗вече имаме
↗secure ownership проверен. Ако искаме да
↗вземем някой друг Secure казва не може
↗deni и как казва denй нали проверката
↗както се сещате е супер проста.
↗Просто отиваме в Secure end Poin не
↗Secure List, пардон, ей тука Secure get
↗order. Взимаме кой е current user и в
↗момента, в който върне вземем ордерите,
↗проверяваме тоя ордър на тоя USюer ли е?
↗Може ли да му го покажем въобще?
↗Естествено, има много по а интелигентни
↗начини да се проверяват тия неща, но
↗като цяло broken access control
↗vнility-то представлява точно това. да
↗не проверяваме access контрола на тоя
↗човек или потребител, който в момента се
↗опитва да вземе тия данни. Класическа
↗схема.
↗Не го правете.
↗Какво да не правим? Аз си ум, че HP
↗рекуестъ вече е проверен преди вас,
↗особено в микросървисни компоненти. Това
↗най-често съм го виждал. Както ви
↗споменах, решаваме, че сървисът, който
↗изиква нас или публичното AP някакъв,
↗който изиква нас, е направил вече тая
↗проверка. Но аз като цяло смятам, че
↗всичките валидации трябва, защото това е
↗бизнес логика, тия валидации, кой може
↗да ги гледа, трябва да са на място,
↗където се намират данните, тоест в
↗сервиса, който ги дава. Изнесем ли ги
↗оттам, почва да стават дискрепънсита,
↗почват да се нарушават неща и да създава
↗проблеми. Така, това беше първото.
↗Минаваме към следващото.
↗Security Miss Configuration.
↗Тука
↗следващия endpint. Отиваме да гледаме
↗как изглежда.
↗Ех, как го затвори. Така. Security miss
↗configuration.
↗Така.
↗Ето сега тука
↗[прочиства си гърлото][хърка]
↗[въздиша]
↗имаме взимане на
↗usзъри. Пак момент, само тука да сваля
↗надолу.
↗Ето сега normal user look up.
↗Взимаме си
↗user 1 admin с vulnerable app admin.
↗Така. But input хоп
↗гръмна. Какво значи това? Това влизат в
↗в тоя с missation влизат всички такива
↗проблеми като да не си проверяваме
↗как беше изключенията. Аз аз обикновено
↗използвам много чуждици и така като кажа
↗изключения ми се струва странно. Знам,
↗че много хора не са съгласни с мен.
↗Предпочетам да им викам епшъни. Но да.
↗Ей това е един типичен пример защо това
↗не трябва да се случва,
↗когато пуснем епtшъна да излезе извън
↗нас,
↗който беше ето не insecure error,
↗vulnerable error. Ето ретърваме директно
↗епшъна с callстека, с всичко или дори да
↗не го ретърваме, просто да не правим
↗някакъв трайкеч в контролера или да
↗нямаме някакъв хендлинг, дали ще е било
↗през някакви midlear, интерсептори,
↗whatever, а директно го хвърлим. Това
↗стигнали навън е супер лесно за Bad
↗actors и за хора, които не мислят лошото
↗да разберат какви библиотеки използваме,
↗каква е архитектурата на нашия сървър. А
↗как изглежда кода? Какви са нашите
↗лайбрита? Как сме си ги структурирали?
↗Това всичкото отвън или както се спомена
↗по-рано, а като ви се е случвало да
↗отворите сайта на банката и ви гръмнат
↗един хубав епшън, нали, и ви се карат от
↗секюритита. Ами карат ви се от секюрити,
↗защото това означава, че всеки извън
↗банката вече знае на коя версия на
↗сървъра сте, на коя версия използвате,
↗какви vрабилитита най-вероятно има там,
↗как могат да бъдат експлоатирани.
↗Всичките тия неща
↗светват тука. Или другото нещо, това пък
↗това най-много го обичаме, нали?
↗Примерно нещо знаем, че гърми, не може
↗сега да го репродуцираме при нас. Ами
↗знаеш ли какво? Ще си сложим един deбък
↗end point със статус, който ще ни върне
↗там едни данни. Ние ще гогледаме само на
↗стейджинг, ама после ще забравим да го
↗махнем. Той ще иде на продъкшъ и хората
↗ще го ударят и ще кажат дай ми статус. И
↗той ще каже, "Ами да, ето аз съм ей това
↗ей това ми е коънекшън стринга. Ей тука
↗са ми апитата, нали, за да може да си ги
↗видим, да си бъгнем. То това е
↗стейджинг. Кой сега на стейджинг го
↗интересува, нали? Ама после тоя
↗стейджинг отива на продакшъ и вече сме
↗The Crown Jeels са изложени пред всички.
↗Така, не правете такива работи. Има
↗други начини за дебъгване, други начини
↗за мониториране. Недейте да го правите
↗това. Така.
↗Secure error и тука същото нещо е
↗internal secure vulnerable error. Secure
↗status статусът ви трябва да връща само
↗това
↗статус може би версия на апликацията
↗най-много и това е stamp. Аз съм healthy
↗жив съм не ми връщай всичко друго. И
↗като да като излезе някакъв erр емижте
↗сега тука нещо гръмна. Ей тука имаме
↗някакво error id. Може да го дадете на
↗нашия специалист, който ще го види отзад
↗в логовете, ще разбере. Тъй че
↗да се върнем тука.
↗Така. Какво да не правим? Не тролвайте
↗просто ей така в контролерите или не
↗оставте нещата, които контролерите биха
↗тролнали, да излязат навън. Хендълвайте
↗ги, рапвайте ги в хубави exсепtion,
↗хубави retт кодове. Оставете theb,
↗махнете, махнете. Да, това тука за малко
↗съм го написал. Оставете theb and point
↗of production.
↗>> [хърка]
↗>> Да, махнете ги. Исках да кажа. Не ми го
↗е писал я. И това си го писах аз. Личи
↗си. [смях]
↗[ахвания] А и не оставяйте. Да. А тонот.
↗Боже. Добре. Окей. Всичко е наред.
↗Забравете всичко, каквото ви казах. Това
↗това не са презентациите, които
↗[прочиства си гърлото] Та да. и да не
↗оставяте санетизацията на клиента, което
↗е някак си obvъс, но продължава да се
↗случва.
↗Така.
↗И сега отиваме на следващото.
↗Как сме за времето? Добре сме за
↗времето. Cryptographic failures.
↗Отиваме на крипtic failures. Това винаги
↗звучи много така advanced. Често пъти не
↗е.
↗[прочиства си гърлото][кашляне]
↗Аа
↗чака да видя сега кое беше. Не е това
↗секюрити. Не.
↗Кой беше бе? Този ли беше?
↗Чакайте. Аз тука съм си ги подретил.
↗[хърка] Sensitive dat. А не та другият
↗беше. Excuse me. Ето този. Така.
↗>> [прочиства си гърлото]
↗>> Та какви са ни вариантите тука?
↗Нека пак да тестваме. Не, get info.
↗Другото ни интересува.
↗Vulnerable. Сега какво какво какво лошо
↗виждате ей тука в тоя endp? Get
↗vulnerable users.
↗Ей тука отиваме. Взимаме си
↗нещата от тука. Имаше ли такова да
↗свети? Не. А, взимаме си нещата от
↗базата, юзерите и ги връщаме. Няма лошо.
↗Ето, айде. Обаче,
↗понеже сме тарикати, ми то там има и
↗други работи, нали, в USър таблицата,
↗дето
↗ако сме забравили. Между другото това е
↗това, дето го виждате тука е много често
↗генериран код от AI. Искам юзърите.
↗Готово. Ето ги от базата. Ето ги
↗юзърите. Върши ли работа? Работи ли?
↗Работи. И изведнъж хоп, ма паролата,
↗махаша, ама всичко е там. Чудна работа.
↗А така. Другото регистрация. Значи
↗най-много обичам като си направя
↗регистрация някъде и да получа мейл с
↗паролата си въртек. Ей това ти е
↗паролата за сайта. Али, направо
↗ми се иска никога повече да не го
↗посещавам тоя сайт. Сега това е подобно.
↗А, регистрирате се и няма проблем. Ей
↗това ти е паролата. Ама що му е
↗паролата? Нали той трябва да си я
↗написал въобще. Не му я връщай. Дори да
↗му я връщаш, ти ще кажеш: "Ами, аз съм я
↗хиширал, да, с MD5,
↗което е другото нещо. Не използвайте MD5
↗за хиширане на пароли.
↗Да, ето го тука. Или сравняване на
↗едното, другото. Значи,
↗едно е да използвате MD5, друга да
↗ползвате примерно Bкрипt, както е
↗използвано тука с с така. Едното се
↗разбива буквално за секунди, другото се
↗разбива буквално за години. Така че
↗of course така. А малко малко
↗прибройвам, защото има доста неща да
↗покажем. Не искам да да изпуснам някой
↗от демотата,
↗затова затова малко претичвам през някои
↗от енпонтите, но отново да кажа в GitHub
↗ще е цялото нещо вътре с
↗документацийката. Е хубаво я попълнил.
↗Ще видите за всеки един endpint какво не
↗трябва да правите. Значи да, не връщайте
↗данните от databй и това даже по принцип
↗е един такъв едно златно правило мое.
↗Никога никогати
↗класовете ви не трябва да излизат
↗навънка. Тоест това да ретърнете
↗entityти класа през контролера биг noно.
↗Ама те ще кажат: "Ама да, ама то нашите
↗DTO-та, дето трябва да ги направим, те
↗са едно към едно. Същите е същите са,
↗ама ще те накарат като да тръгнеш да ги
↗мачваш едно към друго." И като тръгнеш
↗да ги мачиш едно към друго, ще кажеш:"А
↗тая парола май не трябва да я връщаме
↗навън, нали? Малко ще светне нещо.
↗И да, естествено не си строите паролите
↗с MD5. Значи това мисля, че от сигурно
↗20 години хората го казват и продължава
↗да се случва. Така че поне аз съм
↗сигурен, че вие всичките дето сте тука
↗няма да го направите вече. Казано ви е.
↗Тъй че не използвайте MD5 за хиширане на
↗пароли. Така. Инкшъ.
↗Сега [прочиства си гърлото]
↗всички сега ще си помислите, че си
↗говорим за SQ, но не, защото аз вече се
↗уморих да говоря за SQ икшъ и не мога да
↗повярвам, че това все още е нещо през
↗2026 година, но повярвайте ми е.
↗А затова ще си говорим за Command и
↗injection. Сега injection то е горе-долу
↗същото, само че не е нещо, което отива
↗към базата, а нещо, което отива към
↗вашия шел.
↗И сега да кажем ето тука сме си
↗направили някаква някакво поintче.
↗Искаме да си къмвъртваме и това много
↗често. Ей тука отваряме, правим едно
↗сайтче, да могат хората да си качат
↗някакъв
↗MDF
↗Mark и да си го направят на PDF през
↗нашия сървис. Що пък не? Е го. Готино е.
↗Ей тука казваме vulnerable. Хоп. Да де.
↗Обаче, ако е exзеeна
↗с ето това,
↗с файл нейма, който го подаваме като име
↗тока
↗и понеже отзад използваме някакъв CLI
↗tool за мигриране от Markdown към PDF,
↗защото е безплатен и защото ни е лесно и
↗сме го инсталирали на сървъра и просто
↗го викаме, викаме там execют това хоп.
↗Еми, ето. О, ето ти го. Да. А, и ти си
↗Тото. Мхм. Ето, значи вече знаем кой
↗съм. Сещате се тука, че че вместо HIM
↗мога да направя 1000 други неща. Мога да
↗направя дропни базата, рестартирай
↗сървъра, пуснир sha, всичко.
↗И то защо се случва това нещо? Ами ей
↗тука може да видим как се случва. Ей
↗това е командата.
↗Нарочно си я правим ехо, за да видим
↗каква ни е.
↗и сме казали
↗ето тука ето подаваме файлнейма
↗класическа класически сценарии като с SQ
↗инжекtion това което ни е пуснал юзъра
↗ние просто го конкатенираме в командата
↗и го засилваме към шела с процес inf
↗какво може да се случи какво лошо може
↗да се случи много лоши неща может да се
↗случат повярвайте ми сега ето тука
↗същото нещо хоп опа целият ни passвад
↗файл ни се върна
↗в рекуеста
↗или какво имаме в папката. Хоп, ето ни я
↗папката с всичките работи. Общо взето
↗много много неща може да си заиграем
↗тука. Какъв би бил secure начин? Сега в
↗SQL инжекшъна е малко по-лесно, защото
↗там нали имаме параметризирани заявки,
↗където това нещо може да ни помогне.
↗Тука ще трябва малко по-ръчно да ги
↗направим нещата. Неща от рода на регекс.
↗Знам, че така много хора като чуват
↗регекси а
↗не не да но да но не се притеснявайте.
↗AI пише много хубав регикс.
↗Сега има и едни regxabilityта. Няма да
↗си говорим сега за тях ама да. Та regx
↗след това ние искаме да бъде да да ни
↗изглежда инпутат. Общо взето long story
↗short сенатизиране на инпута
↗най-възможните начини. Нали, ако искаме
↗наистина да го направим по тоя начин, че
↗да викаме някаква команда към шела или
↗към нещо друго, това е начинът. За
↗съжаление няма кой знае колко по-други
↗доракоустойчиви начини това нещо да се
↗постигне.
↗Така.
↗Та какво да не правим?
↗Take paramet sanitization for granted.
↗Отново да не си мислим, че юзърт ще
↗напише хубави неща или още по-лошото да
↗ги оставим да се валидират на ниво
↗клиент. Това също ми е било винаги
↗най-любимото нещо. Казват е добре де,
↗ние имаме нашия сървис, ние си пишем и
↗уеб апликацията. Ние си го санетизираме
↗в уеб апликацията. Като сме го
↗санетизирали там, няма проблем, нали? Е,
↗да де, ама то това, че вашата уеб
↗апликация вие си я санетизирате тоя
↗сървис и други могат да го ползват, ама
↗ние не сме дали апи, ама те ще си го
↗намерят.
↗Тъй че да, не го Don't take it for
↗granted. Не го взимайте за даденост. Не,
↗не, не очаквайте, че то винаги ще е
↗така. И това да си подаваш аргументите
↗директно на шела, без да си направил
↗някаква санитизация. Бикно no. Няма
↗значение под каква форма.
↗И последното от тоя списък.
↗Добре, добре се движим. Последното от
↗тоя списък,
↗което е insecure design.
↗А
↗мас беше да така
↗имаме тук сега inure design пак.
↗register directly binding.
↗Какво правим?
↗Vulnerable register. Ето тука имаме си
↗регистрация на user, нали? И какво
↗очакваме? Директно сме казали дай ми
↗тука от бодито юзъра. Виж, лесно сме си
↗го мапнали. А сменяме му там ID-то с
↗някакво друго. Правим муш на паролата.
↗Добавяме го тука в контекста. Се save.
↗Оп, готово. Да де. Май тука има едно
↗хубаво такова. Ние така си различаваме
↗админите в нашето приложение, защото той
↗е и админ, нали? И ние сме преценили,
↗нали, понеже нашата нашият фронтенд ще
↗ни подаде тоя USър без и админ, всичко е
↗супер. Е, да, да де, [смях]
↗ама като си го подам ето така
↗и му подам и тия неща, които не
↗очакваме, че ще ни ги дадат, пък то ни
↗пък те ни ги дават и хоп, вече съм
↗админ. Значи регистрирам се като
↗обикновен потребител
↗или поне през сайта на за обикновени
↗потребители. Обаче пращам и това и с
↗webеб admin и с adдмин, защото преди
↗това съм направил друга регистрация и то
↗ми е върнало как ще изглежда USюзъ
↗и аз я виж тука едно adдмиin това много
↗хубаво много хубаво ми харесва така като
↗го видя така
↗как може secure емили
↗създавате нов user и тия неща не ги
↗взимате директно отпут и още по-хубавото
↗направете си друго DTO въобще да няма
↗тоя
↗Това това прорти в смисъл колкото можете
↗тия неща да ги разграничите, толкова
↗по-добре.
↗Това е secкюр начин. Ето тука можем сега
↗да се регистрираме. Тука хакер се е
↗регистрирал с парола рол администратор.
↗Той всичко пробва, нали се сещате, че те
↗като се опитват да да ви хакнат ей
↗такива работи всякакви ще наредят, ще
↗наредят роля, ще наредят adminн, ще
↗наредят Permisш, всичко каквото мине, ще
↗го пробват.
↗Ето или друго.
↗Такава вор тука акаунт баланс голям
↗сники user registered общо взето не
↗пускайте такива неща навън от вашата
↗апликация ето го secure тука дори слагам
↗и adдми обаче secure point казвари брат
↗ти не си админ
↗и така
↗та какво да не правим
↗да ползвате вашите интерне
↗за еnal нужди. Ей това е лош дизайн.
↗Винаги, винаги, винаги имайте отделни
↗публични DTO-та, които нямат нищо общо.
↗Знам, че е много лесно. Знам, че ами
↗тука имаме един клас. Сега що ще го
↗пишем 10 пъти тоя клас? То става
↗глупаво. Ще трябва после да правим
↗мапъри. Ще трябва Ами трябва да трябва
↗така. Така си пазите се пазите от
↗хакване. Та тука сега ви показах тия пет
↗а пет неща, както казахме. Има още
↗други. Аа има ги и в проекта, може да си
↗го видите. Обаче преди това си поговорим
↗за още едно друго нещо, което така ми е
↗много интересно и любимо в последната
↗година-две, защото не е само кода, не е
↗само вашият код, не е само това какво
↗вие сте написали, може да счупи вашата
↗апликация и да помогне да бъдете
↗хакнати.
↗Сигурно сте гледали новините последните
↗една-две години, освен ако не сте били
↗под камък.
↗Supply chain атаките са the next big
↗sting и те превелват навсякъде. Чупят
↗всичко а на огромни то не бяха аси то не
↗бяха
↗отс не знам колко от вас знаят заx от
↗проблема.
↗Това беше уникален уникална suly chin
↗атака by the book. Просто толкова ерт.
↗Microsoft човек я откри.
↗и ги хвана.
↗А, Евала, за което нали аз казах, че
↗трябва да му вдигнат паметник на тоя
↗човек.
↗А sul chin attack атакта пак. Добре, че
↗много бързо я хванаха. Това също бе.
↗Абе, общо взето последно време suly chй
↗атаките са най-популярната
↗атака, която все още работи с пълна сила
↗и продължава да бъде огромен проблем. И
↗това също е едно от топ 10 на OASP
↗supply chain vulnerabilityтата,
↗защото както казахме само като
↗погледнете последните години, ей тука
↗извадих една статистика от един сайт,
↗защото много ми хареса колко много са
↗големи цифрите и а накрая в сорсовете
↗може да видите 1 200 000 open source
↗maware packages, логнати при тях от 2019
↗само досега.
↗Това са не версии, пакети общо пакети.
↗9,8 трилиона долауда на ма на Малиша с
↗пакети през върху всичките системи.
↗Mavon,
↗PP, MPM, Nugget, навсякъде, нали. Това
↗не е нещо, което е специфично за DNET
↗света. Всички страдат от това нещо.
↗И тука още други. Тука е малко
↗по-интересното, нали, че 65% от open
↗source CV CV-тата, което значи
↗vulnerрабилититата
↗са без CVSS. Някой знае ли какво е CVSS?
↗Това е скоринг на venбилити-то, което е
↗много важно, защото когато скорнем
↗vраabлити-то и се намира в Vраability
↗database, тогава като инсталирате някой
↗NPM пакет, получавате онова там. А, ама
↗това тука е vulnerable, да знаете.
↗Тоест, като нямаме такова, никой няма да
↗ви предупреди, че тоя пакет е vulnerable
↗и че има малиш код в него. Та 65% по
↗статистика нямат такава такова нещо.
↗Нямат скоринг, че са хакнати.
↗И сега ще ви покажа и едно демо. Това
↗как се случва
↗сега? Представете си, аз съм един лош
↗хакер, черче шапка,
↗черен хакер. И а съм си създал един
↗ногет пакет. Ей го. Казва се Consol
↗Magic. Consol Magic е сет от яки extensш
↗методи, с които екстеншъни на на stringн
↗мога да си пиша в конзолата цветни
↗работи. Няма да пиша consol right line,
↗не знам какво. String тоtто to consol и
↗с цвят. И кой не иска такова нещо
↗особено. Всеки ще си кажей това ще
↗направи апликацията ми е гати яката.
↗Свалям си го веднага. Ей го тука вижте
↗има една камаралоуди. Общо взето сега
↗това нещо съм го изфабрикувал. Не съм
↗качил такова нещо в getт, защото ще ми
↗баннат акаунта, както се досещате,
↗но съм но for presentation needs съм
↗направил едно такова нещо и за веднага
↗сега ще ви покажа и демото.
↗Супер. Така.
↗Демото също се намира тука в тоя същия
↗solution. Досега гледахме Vulnerable
↗App. Ето го Consol Magic.
↗Сега аз вътре съм направил това аз съм
↗го правил. Това не е от AI. Личи си,
↗нали? [смях]
↗А
↗не съм направил кой знае колко много
↗пакети. Имаме тоя пакет ту конзol. Ето
↗то нещо супер семle extensншъ на string
↗с някакъв consol color и просто пише те.
↗За да си спестим тия четири реда код си
↗инсталираме тоя пакет. Супер много яко.
↗Така. И а
↗и тука имаме и едно демо апликацийка,
↗която аз тръгвам да пиша и си казвам ей
↗тука ще си ех сега гледай колко е
↗грозно. Сега трябва да пиша consol right
↗line два пъти. Няма ли някакъв пакет,
↗дето да ми спести това ужасно нещо?
↗Отивам и веднага нека да го пробваме.
↗Така.
↗Ето отиваме тука и сега казваме първо да
↗покажем. Значи нямаме го в момента
↗нямаме тука такъв пакет. Имаме някакви
↗други неща.
↗А не дру друго другото отворих. Това
↗нямаме инсталиран пакет. И сега отиваме
↗и си го инсталираме. Dnet
↗add Ето пакетът отново не си го
↗инсталирам от noetwork, защото не е
↗качен там. Инсталирам си го от
↗локалното, където съм си го билднал
↗преди това. Source local packages. Бам.
↗Готово. Инсталиране. Всичко е точно.
↗Ето тука. Опа, ето тука в local packages
↗ми е едно get пакетчето, което аз преди
↗това съм си билднал и ето той ми се
↗инсталира всичко точно. И сега тука нали
↗ще си кажа ей тия тука глупости ги
↗махаме и правим тук
↗во айде де.
↗Сега трябваше using да си направим.
↗Добре, благодаря ти.
↗using
↗color magic ли се казваше? Май така се
↗казваше.
↗Consol magic е. Thank you.
↗Consol magic. Така. Дали работи това
↗нещо? Сега ще видим. Предварително ей
↗тука съм си отворил една папчица бул,
↗която няма нищо в нея. Може да видите
↗празна.
↗Ето да се уверите, че няма нищо в нея.
↗И сега тука ще кажем Dnet run
↗проектчето.
↗[хърка]
↗А вижте колко е яко. Оранжево е. А е
↗само с два реда код. Да де. Обаче сега
↗тия два реда код отиваме тука в бу.
↗Правим пак LS и се появил едно файлче. И
↗какво има в това файлче?
↗Пава D файла ми.
↗Яко, нали? А сега ще ви покажа колко е
↗лесно. Ето тука е магията.
↗Вно пакетите може да имате MS build
↗таргети, които се екзекют всеки път при
↗билд пристор на пакета. А знаете ли кое
↗е още по-якото, че не може да ги спрете?
↗Няма
↗лесен начин да кажете на рестора не ми
↗екзекютвай тия MSB от таргетчета. Избил
↗таргет е супер прост. Създай ми тука
↗една папка blue и копирай пасав в нея.
↗That's it. Имайте в предвид, нали, че
↗като пускате restore, това нещо се
↗екзекютва в контекста на вашия user
↗което означава, че езева в контекста на
↗root, което нещо се случва и на
↗локалната ви машина. Restore, бум,
↗компрометирани сте, имате троянец,
↗изтекаха ви всичките пароли. Пускате го
↗на C-я, бум. Компрометира ви CPйна.
↗тегли по време на Cware, инжектира го
↗във вашия код и вече вашият сървър е
↗компрометиран и почва да разпространява
↗Maware навсякъде. Тъй че [смях]
↗това е много неприятна атака.
↗Та [хърка]
↗ама тука сега ще ми кажете да де, ама аз
↗не използвам естърnalл такива работи или
↗имам аа много сериозен процес по
↗добавяне на външни пакети. и всичките ги
↗отваряме, им проверяваме вътре таarгет
↗файловете и така нататък. Супер. Добре.
↗Ползвате [прочиства си гърлото] ли вие а
↗Visual Studio Code?
↗Колко от вас имат инсталирано Visual
↗Studio Code на компютъра си?
↗Нали знаете, че Visual Studio Code е
↗просто билдната уеб апликация с
↗електрон нали?
↗А електрон е MPM пакет.
↗И тоя пакет има някакви dependнта
↗и ти сега ще си кажете ама те са само
↗три.
↗Добре, ей това е графа
↗на тия три dependнънсита.
↗А за тия всичките тука, ако извадим
↗списъка с мейтенъри и хора, които са
↗включени в тия пакети, той изглежда
↗горе-долу ей така.
↗И аз не знам за вас.
↗Ама аз нямам много голямо доверие на I
↗am evalбиit
↗и какъв код е сложил в пакета си.
↗[аплодисменти]
↗Обаче сега със сигурност ще има и други,
↗които ще казват: "Е, ние ползваме Visual
↗Studio, vsД ползваме."
↗Е, то има и други апликации с електрон.
↗А мога да се хвана на бас, че няма тука
↗в тая зала нито един, който да няма поне
↗една от тия четирите.
↗Така че
↗keep ком [смях]
↗не всичко е загубено. Сега не казвам, че
↗вие че vs кот е компрометиран, разбира
↗се. Просто давам една ментална идея
↗какво може да се случи, когато един
↗достатъчно мотивиран зъл хакер от
↗Северна Корея с достатъчно време и
↗ресурси реши да го направи.
↗Какво може да направите?
↗Използвайте стрикт вършани. Не
↗използвайте Wild Characts за пакетите
↗си, тоест стая и всичките нагоре майъри,
↗защото така хакват хората. Знайте си
↗dependдънситета. Винаги бъдете много
↗майнф от това какво инсталирате. Не
↗просто никога не добавийте една
↗библиотека. Сега това в DNET света,
↗слава богу, не е така. В npm светът е
↗Wild West за това за какво използваме
↗пакети. Тука поне е така, но все пак
↗знаете си dependнситата. Ако може, не
↗използвайте пакети на особено на
↗най-sensi частите от вашата система,
↗частите свързани с autentication, с пари
↗и с такива работи.
↗И educate your developers.
↗Сега аз защо го казвам това нещо? Аз съм
↗девелопър и смятам, че е много важно а
↗да се обучат хората на secкр кодинг,
↗защото за мен е това е най-големият гап
↗и най-големият проблем в момента.
↗Тъй че
↗отдавна трябва да мислим, че
↗секюрити-то не е само за
↗не е само за secкюрити хора или за
↗хакери и за бели хакери и така нататък.
↗А знаете ли за какво е чие
↗responsiбилити е
↗всъщност?
↗Developers, developers developers
↗developers developers
↗developers developers developers
↗developers.
↗И затова искам да ви поканя на следващия
↗Олап, който ще се случи на 30-ти. Елате,
↗ще си говорим за secюрити, ще си говорим
↗за това как се хакват посттерминали.
↗Имаме такава лекция. Напълно безплатно
↗е. Това е QR кода за регистрация в
↗Meetup. Искаме някаква регистрация само
↗за да знаем колко пица трябва да купим.
↗Нищо друго не се изисква или нямате
↗някаква ангажираност.
↗И с това искам да ви благодаря, че бяхте
↗тук днес и че ме изслушахте. Bra.
↗[аплодисменти]



