25 април, 2024

Роберто Клапис работи като Security Engineer в Google. Неговата страст е Go, затова често се включва с принос в open source проекти. Попитахме Роберто за най-добрите практики за добра защита, които прилагат в Google.

Какви технологии използвате за разработка на своите проекти?

Най-много използвам Go и TypeScript за нови проекти и Java, в комбинация с Closure, за да поддържам работата на останалите. Предпочитам Go за backend и TypeScript за frontend.

Какви са Вашите отговорности в Google?

Работя по дизайна, разработката и внедряването на нови функции за повишаване на сигурността във всички Google уеб приложения. Това означава, че аз и екипът ми работим по CSP, Fetch Metadata, Cross-Origin-Opener-Policy и подобни фийчъри за сигурността на браузърите, например за Chrome и Firefox. Също така пишем библиотеки, за да приложим тези фийчъри за сигурността при браузърите в самите продукти на Google.

Част от нашата работа бе представена на Google I/O от нашите Security Information Engineers – Артър Янс и Лукас Уайксълбаум. Можете да откриете видео от презентацията им в YouTube.

Какви са най-добрите практики за сигурност, които прилагате в Google?

Това, което обикновено се опитваме да правим е да се грижим за сигурността от няколко различни страни. Някои от най-ефективните практики са:

  • Hardening на фреймуъркове: несигурен код не се компилира
  • Ограничаване на достъпа до несигурни API-та: всяко използване на потенциално опасна функция трябва да се прегледа от екипа по сигурността
  • Добавяне на допълнителни проверки: преди кода да се използва в production, преминава допълнителни проверки за структури, склонни към грешки
  • Тестовете да покриват целият код и fuzzing на несигурен код
  • Преглед на сигурността преди пускането нови функционалности или продукти
  • Допълнителни mitigations: когато всичко се счупи има някои “safety nets” на място, за да може, дори ако несигурен код попадне в системата е много трудно или дори невъзможно да се експлоатира. За целта използваме Content Security Policy (за уеб апликации) и sandboxes (за бинарни файлове).

Кое е по-важно за добрата защита – езикът, който сме избрали или самият дивелъпър?

Мисля, че и двете, защото едното няма как да бъде ефективно без другото. Дивелъпърът е ключов затова е важно специалистите да бъдат инструктирани и информирани за сигурността и съответно да познават рисковете, когато пишат кода си. От друга страна, е от фундаментално значение да имаш сигурни езици и фреймуъркове – дори и най-добрите програмисти понякога се подвеждат. Туловете трябва да са там, за да уловят човешките грешки.

Какви са последните ъпдейти и новини в Go и как са полезни те на специалистите?

Мисля, че най-добрите нови неща в Go са:

  • Модулите започват да се ползват повече и повече, което позволява по-добро управление на зависимостта, нещо, което ни липсваше през последните 10 години. Вярвам, че това ще направи Go дори по-атрактивен за нови (и не толкова нови) компании.
  • Започна работата по Go 2: Вече виждаме първите промени по езика, като за момента са свързани главно с числови константи, това все пак е първата стъпка, с която се опитват да развиват синтаксиса. Нововъведение е и въвеждането на по-добра проверка и справяне с грешки в Go 1.13, което е една от най-известните болни теми на разработчиците.
  • Мисля, че един от най-пренебрегваните, но важни нови инструменти е gopls: новият сървър за езици, който ще даде възможност на IDE и текстовите редактори да предоставят още по-добро изживяване за ползвателите на Go. Инструментите в езикова екосистема са почти толкова важни, колкото и самия език.

 


Обичате ли да допринасяте за проекти с отворен код?

Приносът ми в проекти с отворен код е към Gо, както и стандартната библиотека на езика. Преди поддържах някои OS програми, които сам бях написал, но днес предпочитам да говоря на конференции, за да споделям това, което знам с общността. Считам, че приносът към проектите за OS не се състои просто в кода, това е принос за добрата среда, в която знанието е свободно и универсално достъпно за всички.

Наскоро в Twitter се появи забавна дискусия за „забавните начини за отстраняване на грешки в някои #golang кодове:“. Можете ли да споделите с нас вашите трикове?

Не знам за “забавни” трикове, но съм фен на “мързеливите” трикове. Един от любимите ми е следният: когато репортвате бъг, обикновено не е лесно да намерите кода, отговорен за него. Най-добрият начин за автоматично намиране на това е просто да напишете един тест, който се проваля, когато бъгът е налице, а минава успешно, когато грешката я няма. След това поставяте този тест във файл и просто стартирате bisect върху историята на къмитите, за да откриете кой е въвел проблема. Можете да изпълните само регресионен тест с опцията “-run”. Ако се окаже, че и това не е достатъчно, можете да използвате coverprofile за теста, за да видите кои редове са били изпълнени по време на пробния тест. Go има вградени инструменти за цветно изпечатване на тестовото покритие (има интересна публикация в Go blog за инструмента). Плюс, ако ви харесват дебъгери, бих предложил да опитате Delve.

 

А кой е главният ви съвет за потребителите, които искат да запазят неприкосновеността на данните си?

Поверителността е размита тема и всичко зависи в голяма степен от модела на заплахата. Ако се опитвате да се защитите от правителството, от доставчика си на интернет или от тракери на рекламодатели, съветите ще се менят според съответния случай. По принцип бих посъветвал, винаги да имате предвид границите на информацията, която споделяте: какво споделяте, с кого и дали наистина е необходимо или си струва да споделите тази информация с този човек.

Налагането на мерки за сигурност е сложна задача. Да очакваме ли по-голяма помощ за разработчиците, които искат да защитят правилно своите приложения с продукти на google?

Да, ние работим всеки ден, за да предоставяме инструменти, които са трудни за използване – ако ги използвате по грешен начин. Има много неща, които вече сме направили (като Google удостоверяване на 2FA), има и някои предстоящи такива. Мисля, че цялостната сигурност на нашите приложения и API е в добра форма.

Конкретно за Go планираме да пуснем по-сигурна версия на пакета html / template – смятам, че уеб приложенията ще се възползват от новите добавени граници за сигурност.

Бих искал да добавя, че в момента наемаме хора в Google Security Engineering екипа в Цюрих и Chrome Security Engineering екипа в Мюнхен. Бих препоръчал на всеки търсач на забавни предизвикателства, да се присъедини към нас!

Интервюто проведе Вяра Стефчева

Тагове: , , , , , , , , , , , , , , , ,