Лекция

How .NET Apps Get Hacked?

Тодор Тодоров (Senior Software Engineer; лидер на OWASP Sofia Chapter)

Лекция за често допускани грешки при писане на .NET код, които водят до пробиви — хеширане на пароли с MD5, връщане на пароли навън от приложението и command injection. Лекторът показва примери какво не трябва да се прави, включително в код, генериран от LLM, и представя дейността на OWASP Sofia Chapter.

Кадърът е от сървъра на YouTube. Самият плейър — и всичко, което той зарежда — идва едва след като пуснете видеото.

Описание

🟪 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.

↗[аплодисменти]

← Всички лекции