hugo config update

This commit is contained in:
Casual 2024-05-21 08:52:25 +03:00
parent a4b914376c
commit be654f32e7
11 changed files with 1548 additions and 154 deletions

View File

@ -7,7 +7,7 @@ I write __short__ and clutterless aricles about:
- productivity - productivity
[More info](/whoami), [disclaimer](whoami/disclaimer), [license](/whoami/license) [More info](/whoami), [Telegram](https://t.me/casualblog), [disclaimer](whoami/disclaimer), [license](/whoami/license)
<!-- &nbsp; --> <!-- &nbsp; -->

View File

@ -0,0 +1,57 @@
+++
Title = "Информация по докладу"
hidden = true
+++
# OpenSource и как написать свой первый хакерский инструмент?
Другие названия:
- OpenSource и написание инструментов для хакеров
### Время на доклад
Суммарно = 30-40 минут
5% - Введение
10% - Что такое OpenSource?
50% - Особенности написания хакерских утилит
30% - Как писать программы, если вы не программист
5% - Выводы
?% - Q/A
## Краткое описание
Доклад про важность OpenSource в жизни пентестера и как новичкам начать писать программы с нуля.
## В чём смысл доклада?
Смотивировать хакеров больше писать OpenSource инструменты и выкладывать существующие.
## Для кого? (цельевая аудитория)
Для начинающих Red-Team хакеров/пентестеров.
### Есть ли в докладе новая информация для аудитории?
Потому что хоть и хакеры используют много OpenSource инструментов, при написании своих инструментов, они пишут инструменты и скрипты чисто для себя и под свои задачи, не делясь ими с миром.
### Почему для аудитории полезно использовать на практике информацию из доклада?
Хакер сможет написать свой первый хакерский инструмент. Хакер получит большую известность за счёт разработки своих утилит, а также получит развитие этих же утилит с помощью комьюнити. Следовательно и хакер узнает что-то новое.
### Почему доклад интересен для аудитории?
Потому что много начинающих хакеров хотят иметь свой собственный инструмент, который выполняет их нужды и облегчает им жизнь. Им будет интересно узнать как начать писать свою программу.
### Почему доклад вдохновляет аудиторию?
Потому что в нём рассказан пример человека, который пишит свой личный OpenSource хакерский инструмент, без обучения программированию
### Почему доклад забавный?
- есть шуточная лицензия для доклада, которая обязывает зрителей сделать шуточные вещи, о чём 99% людей узнают в конце доклада, если они не посмотрели о ней в начале доклада
- есть несколько мемов из OpenSource комьюнити (+ оригинальный мем)
- пример разработки Metasploit забавный из-за того как он влиял на мир и его создателя во время появления проекта
## Какое взаимодействие с аудиторией:
- QR код на шуточную лицензию доклада и плот твист с шуточными требованиями для аудитории - для того, что бы показать важность ознакомления с лицензией
- Вопросы к аудитории, как бы они поступили на месте героев доклада, с объяснением логики - к примеру, во время описания разработки Metasploit, спрашивать пару человек из аудитории, как бы они поступили на месте Мура.

View File

@ -0,0 +1,91 @@
+++
Title = "Ваш фидбек"
draft = false
hidden = true
+++
Оцените мой доклад!
Вы можете оставить фидбек в вольной форме или ответить на следующие вопросы:
- На сколько доклад держит ваше внимание (интерес)? (от 1 до 10)
- На сколько доклад забавный?
- На сколько доклад мотивирующий?
- На сколько доклад познавательный? Много ли вы нового узнали?
- Какой вывод вы можете сделать из доклада?
<style>
.form-container {
<!-- border-radius: 10px; -->
width: 400px; /* Width of the form container */
margin: 0 auto; /* Center the form container horizontally */
}
.form-container label,
.form-container input {
display: block;
margin-bottom: 10px;
<!-- height: 100px -->
}
.form-container button {
background-color: #333333; /* Gray background color for the button */
color: #fff; /* Text color for the button */
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
}
.form-container button:hover {
background-color: #888; /* Darker gray color on hover */
}
</style>
<div class="form-container">
<form id="postForm">
<textarea rows="5" cols="50" id="textField" name="textField">
</textarea>
<!-- <input type="text" id="textField" name="textField"> -->
<br>
<button type="button" onclick="sendPostRequest()">Send</button>
</form>
</div>
<script>
function sendPostRequest() {
var textFieldData = document.getElementById("textField").value;
var xhr = new XMLHttpRequest();
var url = "https://blog.ca.sual.in/api/message";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
}
};
var data = JSON.stringify({"text": textFieldData, "username": "PHD2_feedback", "gateway": "gateway1"});
xhr.send(data);
alert("I got your message, thanks!")
}
</script>
---
## Контакты
+ [Блог](https://blog.ca.sual.in/)
+ [Блог в телеге](https://t.me/casualblog)
+ [TG](https://t.me/AlexeyInfosec)
+ [XMPP](xmpp://casual@pwned.life)
## Материалы
- [Презентация](/hidden/PHD2_presentation.pptx)
- [Abstract](../abstract)
- [Транскрипция доклада](../trans)
- [Keypoints](../keypoints)
- [Лицензия доклада](../license)

View File

@ -0,0 +1,527 @@
+++
Title = "keypoints"
hidden = true
+++
(наверное не финальная версия)
# Введение
>старт
>клик
- 70% не делятся прогами
>клик
- замечательный мир, +1.3млн репозиториев, диски в хранилку
# Whoami
>клик
- Я Casual, независимый иследователь и топ-50 standoff365
## Для кого, о чём и зачем этот доклад?
>клик
- для начинающих хакеров, первый инструмент.
- А PRO выкладывать в OpenSource
- Цель заманить в OpenSource -> Free
>клик
- лицензия доклада
- (интерактив) кто уже выкладывал что-то на github + расскажите
# Что такое OpenSource и Free Software?
>клик
- теория OSS ("4свободы"),
>клик
- Free (4 важнейшие свободы)
>клик
- OSS = Free?
>клик
- не совсем
## Идеология
>клик
- OSI и FSF (free=свободная, не бесплатно)
- разница, 4свободы
- намерения разрабов OSS заменить ком. прод, Free - предоставить свободы
- калькулятор,
>клик
- "нельзя просто так взять и модифицировать калькулятор"
- обход - root/прошивка
- "те у кого кастомный android можно пересчитать по пальцам в этом зале"
- (интерактив) У кого custom android? (11-ый, опусти руку)
- вендор-угнетатель, никакого OSS
>клик
- root на Xiaomi + месяц
- если gnu GPLv3 - можно было бы обновить
- решение - поставить калькулятор как обычное приложение.
- но я не люблю ставить лишние приложения и не знать что установлено на моём устройстве.
- не новы случаи предустановленного бэкдора
- А где есть google services, google владеет телефоном
>клик
- фотки на запрещёнку, доступ к смс и уведомлениям, удалённая блокировка или обнуление. "В общем"
>клик
- "Literally 1984"
- Возвращаясь к Xiaomi, на флагманах просто нет кастомных прошивок
# Лицензии
>клик
- back to OpenSource, кратенько про licenses
- OpenSource = permissive/copyleft
- License - нужна для защиты разработчика
- permissive - база (4 свободы)
- permissive схожа с copyleft, но она не запрещает приватизацию
>клик
- в случае с copyleft - компания обязаны выложить их программу в opensource с этой же лицензией
# +/- for dev
## +
>клик
- совместная разработка = недопонимания
>клик
- выложить прогу = сделать мир лучше.
- Столлман изменил весь мир сделав GNU/Linux таким каким мы его знаем
>клик
- вы более узнаваемы в комьюнити = приглосы на events/work
- Мур попал в Rapid7 из-за metasploit
>клик
- при устройстве на работу - будет круто иметь OSS.
- В моём прошлом собесе так было
>клик
- делая OSS, get PRs => improve skills/pentest.
- Moore got better at writting exploits while working on metasploit
>клик
- when code public - you write better. Это Эффект Хоторна
# +/- for usr
## -
>клик
- there might be no user support, project may die in next month
- I have sent PR to one youtuber, but he abandoned project
>клик
- downloading OSS without checking code = downloading cracked software
- latest big example - XZ (backdoor)
>клик
- no one is responsible if something goes wrong and you loose your data
>клик
- there might be no documentation for project
- Once I've found one specific library for python, but there wasn't almost any documentation,
## +
>клик
- free
>клик
- you own program and you can do anything with it.
- Guy with FL-studio like programm couldn't install version which he bought 10y ago, bc online activation
>клик
- user can check security
- XZ, secResearcher found backdoor, in proprietary software it could be not found at all
>клик
- user customize entire program
>клик
- any user can help dev with prj
- not only about code, also proposals, discussions, user support, documentation
- ProxmoxVE devs gets more fixes from users than from companies
# Особенности написания хакерских утилит
>клик
- example of how its to write cool tool
>клик
- hero - H.D. Moore, Metasploit dev
>клик
- in 90-ых M was 18, job as pentester
- at those times, hard to find exploits
- today we google "prod ver exploit"
- get exploit = search people in IRC chats
>клик
- when PC of M was full of diff exploits = creation metasploit
- metasploit = select exploit, write input data, run
- (Interact) Imagine you are boss of infosec company, and your сотрудник shows program which can give ANYONE ability to hack ANY company. How would you do?
- In right hands - instrument to def many companies
- In wrong - cyberweapon
- When M shown to his boss - he was afrid of consicuences
- but he could get rid of M due to many active pentests
- In 2003 metasploit going OpenSource in metasploit.com
- =serious народное волнение, никто не остался в стороне
- M company
- his clients
- black hat hackers
- darknet hackers who write exploits
- other pentesters - they thought M steal theirs work releasing this simple tool
- all those who didn't liked -> try site hacks, DDoSs
- 1 hacker even hacked провайдера M, bc he couldn't hack site
- then they attack M = клевета, identity theft, anything you can think
- M's boss also got mail to fire M, bc what did M was unresponsible to their believe
- but M was getting more motivated by that
- Not only hackers were annoyed - vendors didn't wanted to have exploit in metasploit for their software
- M liked being attacker and target
- gov also didn't liked Metsplt - M had money for адвоката if he got in jail by night
- постепенно dev team = 200
- and In 2009, M had долги, стартап, беременная жена, rapid7 propose to buy Metasploit
- = we have openSource and Pro version. M got high paing job + company вступилась за него
- Now metasploit not only tool for pentesters, it's tought in schools.
- Программа Мура прошла сквозь ненависть всего мира к общепринятому стандарту.
- Сейчас Мур уволился из Rapid7 и у него своя компания.
# Как писать программы, если вы не программист?
>клик
- now i hope you think "OpenSource is cool"
- пройдёмся по курсу молодого боййца -> вы могли выйти готовыми начать писать свою программу
## Язык программирования
>клик
- про то на чём писать
>клик
- холивар за язык программирования,
>клик
- но самый крутой язык - английский. Помогает где угодно
>клик
- а если не знаете - выберите GoLang
- только не показывайте друзьям их маскот
### Как ему научиться
>клик
- я не люблю монотонно учиться, учитесь...
>клик
- пиша свой и читая чужой код, then you will learn
- если первый язык - то
>клик
- 1. офф туториал как запустить
- 2. интерактивная экскурсия
- 3. туториал на примерах
- = отличная база
# Как ~~программировать~~ гуглить
>клик
- прогеры не пишут, прогеры...
>клик
- звучит смешно, но - научитесь гуглить самостоятельно
>клик
>клик (Дабл)
- 1. на английском
>клик
- 2. конструкция запроса
>клик
- 3. нет ответа -> перефразируй, можно chatgpt, без ответа
>клик
- 4. не проси помощи у знакомых и на форумах за 25м, научись
## ОС
>клик
- пара слов - используй GNU/Linux
## Git и все-все-все
>клик
- про git
- git - система контроля версий. откат до предыдущего сохранения
- кооперация. совмещение кода
- сервисы для доступа к git - gtihub, на него и грузим
## Guidelines по созданию OpenSource проекта
>клик
- как же сделать свой OpenSource
>клик
- 0. регаемся
>клик
- 1. создаём repo
>клик
- 2.license - MIT=idk/GPL=free
>клик
- 3. git clone
- if git clone SSH = error - no ssh key in GitHub
>клик
- `ssh-keygen`, 3xEntr, cat key | copy
>клик
- paste SSH pub key -> github. We can download (via SSH)/+update changes
>клик
- 4. составьте план разработки
>клик
- u need:
- write which functions prog have
- write which input
- devide funct to steps
- set proirity
- essential func
- additional
- enchantment
- for instance:
- i wannt prog to check DOS - compare server response time bofer atck and after (DOS Checker)
>клик
- also in real time, with beautiful TUI
>клик
- Plus custom headers
>клик
- And POST if backend task
>клик
- Also check requests - HTTP porxy
>клик
- for accuracy - few requests, среднее время ответа
>клик
- input we need:
>клик
- url link
>клик
- request type GET/POST (GET default)
>клик
- request body for POST
>клик
- link to Proxy
>клик
- monitoring?
>клик
- lets devide func to steps
- for DOS checker we need
>клик
- get link from terminal
>клик
- write to var
>клик
- make GET to url
>клик
- get response time
>клик
- write to var
>клик
- let user start attack, wait any button press
>клик
- repeat GET and Response time and write to another var
>клик
- compare vars, if 2x+ then attack successful
>клик
- http proxy - get var from term. If not empty, set as Proxy in every request func
>клик
- POST req + body - another func which sends POST with body from flag.
>клик
>клик (дабл)
- custom Header - if flag not empty - add to headers
>клик
- monitoring mode - find libr for TUI. Imagine how it should look. И т.д.
>клик
- and now priorities:
>клик
- essential: DOS, Proxy
>клик
- Add-ons: среднее время, POST
>клик
- echancment: headers, monitoring
>клик
- 5. dev from very basic
- just sit and do element which you want. Google may bless you
- if google give 0 => более мал. элементы
- when new feature, check that prog works.
- then upload changes to repo with `git add,commit,push`
>клик
- but you will failure cuz Git don't know your email/nick, add them with suggested `git config`
- А, `git add` - new files to repo
- `git commit` - фиксирует изменения, to revert
- `git push` - upload to github, need to add SSH key, what we already did
- after that, local changes will appear in github
>клик
- Напишите README
- README = txt describes proj. It's first thing that potential user will see in your tool.
- Readme should answer:
>клик
+ what project do?
>клик
+ Why is it helpful, which usecase
>клик
+ How to install and try it?
>клик
+ Which func exist and how to use them (documentation)
- And now about owncloud_bruteforcer
## пример - owncloud_bruteforcer
>клик
- In pentest I've found OwnCloud
>клик
- owncloud - opensource cloud.
- after few login tries - i wasn't locked out, So I would make отчёт and get reward
- BUT i couldnt find prog with requirments
- for owncloud auth need:
>клик
- CSRF token from body
>клик
- Cookies from headers
>клик
- specific client header
- I want write bruteforcer - auth with wordlist
- более того, with userlist
- in owncloud case, before auth, we nedd GET CSRF+cookie
- So idea is simple, we need
### Идея
>клик
- get input data via CLI
>клик
- with ability to attack userlist,specified user,or default
> пауза
>клик
- Get CSRF+cookie, for that we need:
>клик
- make GET to login page
>клик
- with regexp get token from body
>клик
- with regexp get cookie from headers
- and put them to variables
>клик
- Use wordlist for attacking user
- and then try to auth
>клик
- в цикле воркеры авторизуются паралельно
>клик
- before each auth worker get new token+cookie
>клик
- each worker get next password and try to auth with all parameters
>клик
- worker checks if login was successful or not by response from server
### Разработка
>клик
- in dev, inconvinient if auth sucessful, by showing packet to Term, => add http proxy, to check auth
>клик
- in dev, were bugs, a lot, that's the unexpected one:
- the point - I use channels, In go, Channel is used to transfer vars beetwen parallel OP
- you can think as tube which contain X vars, and they выстраиваются в очередь.
- after getting var out of chan, var dissapear, good in my case
- So what's the problem in this pseudocode?
>клик
- You have 3 minutes, можете поднимать руку и высказывать предположение. Hint - bug will eat all RAM. Why?
> 3m wait
- that's another hint - quick fix
>клик
>1m wait
- the problem - GC не успевает чистить, from vars in цикле.
- but in this case prog user 250MB RAM, not what I expect.
- Final решение..:
> wait to read
>клик
- so prog run background proc which add passes up to 1000, when free - add new
- next in parallel run bruteforcer
- not going far from bugs - lets talk about slow programming and cult of done
- because final solution - is faulty - everytime it reads again from disk. but я могу допустить этот баг
- so to bugs I have 2 варианта подхода
- Slow Proggraming and manifesto Cult of Done
- What's SlowProgr? - It's when you prog to Заниматься творичиство and get удовольствие. You slowly, methodically, try to решить кусок кода эфф. решением. много получают кайф от этого.
- 2nd var - follow manifest Cult of Done, it isn't aboud proggraming, but about do things faster. It's short and I like it, there is a part:
>клик
- "2.Смиритесь: всё, что вы делаете это "черновой вариант". Так проще завершить работу."
- expect that you will not complete, it will not have all func, code optimisation, full documentation
>клик
- "3.Этапа "редактирования" не существует."
- if you expect to basically write basic func and then optimise them - you will not do it OR it will take much time. Write good solution right away
>клик
- "7.Сделав что-то, можно про это забыть."
- написали программу? Забудьте про её поддержку. У вас и так достаточно проектов над которыми вам нужно работать.
>клик
- "8.Смейтесь над совершенством. Оно скучно и мешает вам завершить результат."
- хоть я и перфекционист, но вы никогда не закончите проект, если будете делать его идеальным
>клик
- "10.Поражение тоже считается завершённостью. Совершайте ошибки."
- если у вас не вышло написать программу, то вы всё ещё в выйгрыше, вы узнали что-то новое и в следующий раз сделаете лучше.
- Какой подход лучше - решать исключительно вам.
- What was more unexpected - how owncloud reacts. Besides creating bruteforcer, I wrote DOS. When I tested in lab 100% CPU
>клик
>small wait
- I tell ablout bugs so you understand errors = normal. they make you better. do mistakes
- you can check prog in this QR + that's how it works
>клик
>30s wait
# Выводы
>клик
- резумируем доклад. Вы сегодня узнали:
>клик
- Узнали про OpenSource, виды лицензий и Free Software
>клик
- Узнали что будет если написать революционный хакерский инструмент
>клик
- узнали как сделать свой первый OpenSource проект, а это:
>клик
- сделать Git репозиторий,
>клик
- составить план разработки,
>клик
- выставить приоритеты для функций программы,
>клик
- разделить их на самые малые шаги,
>клик
- и начать писать
## Community track блиц
>клик
- А теперь небольшой Community track блиц:
>клик
- 1) Чего не хватает в современных профессиональных сообществах?
- openness. pentesters don't share their methodology and when use them. Especially in short form. I lack it so I write my own and will share in blog
>клик
- 2) Представь, что проекты, которые ты описал в докладе не были созданы. Как бы ты решал исходную задачу?
- i talked about metasploit,git,golang+owncloud_bruteforcer
- metasploit made ИБ. if no history changes - I would use exploit-db - same exploits
- no git - collaboration hell. I would use nextcloud + btrfs snaps
- No go - write in C++/python -> Rust
- no owncloud_bruteforcer - I would write script with curls.
>клик
- 3) Какой open source проект тебе хотелось бы создать если будет больше времени/ресурсов?
- I already write this prog, but due to доклад он на паузе, Ruina - моя автоматизация Recon'a для пентеста. Как допишу до v1 вкину в блог
- Вы можете оставить фидбек для меня, а также найти транскрипцию доклада, и материалы к ней по QR коду далее
## Final
>клик
- И раз уж вы все досмотрели этото доклад до конца, вы обязаны выполнять условия лицензии, я зачитаю несколько из секции 7.
- Будьте этичными хакерами
- Делитесь исходным кодом своих программ
- Позвоните маме и сделайте комплимент.
> small wait
> клик
- источники
> клик
- Спасибо за внимание!
> wait until applause fin
> клик

View File

@ -1,9 +1,9 @@
+++ +++
Title = "Лицензия доклада"
hidden = true hidden = true
+++ +++
```txt
Attribution-ShareAlike 4.0 International Attribution-ShareAlike 4.0 International
======================================================================= =======================================================================
@ -436,4 +436,4 @@ It's a modification of Creative Commons BY-SA 4.0
Creative Commons may be contacted at creativecommons.org. Creative Commons may be contacted at creativecommons.org.
```

View File

@ -0,0 +1,719 @@
+++
Title = "Транскрипция доклада"
hidden = true
+++
# Введение
Знаете ли вы что около 70% хакеров не делятся со всеми своими личными программами и скриптами
(скрин со стендофф чата)
А представьте, какой был бы замечательный мир, если эти 70%, делились ими! На github'e сейчас находится 571,000 результатов по ключевому слову 'hack'. Делим эту цифру на 30 процентов, умножаем на 70% получаем прирост на 1,300,000 репозиториев! Заодно, так мы бы заставили Microsoft купить для Github ещё парочку дисков в хранилку.
( (571000 / 30) × 70 ≈ 1,332,333 )
(скриншот с github)
<!-- 35s -->
## Whoami
Привет, я Casual
Независимый иследователь, и я находился в топ-50 хакеров на Standoff365
(независимый иследователь = безработный :) )
Подробней обо мне вы можете посмотреть в моём блоге
<!-- TODO может изменить статью в блоге -->
(QR и ссылка на about me в блоге)
(Алексей - Casual)
<!-- 10s -->
## Для кого, о чём и зачем этот доклад?
(
1. Научить писать hack tools
2. Заставить их выкладывать
)
Я сделал этот доклад для начинающих хакеров, которые хотят упростить себе жизнь и написать свой первый хакерский инструмент, который поможет вам легче и быстрее взламывать самые непростые штуки. А также замотивировать более опытных, распространить свои скрипты и программы в публичных git репозиториях.
То есть моя цель в том, чтоб заманить вас в движение OpenSource, а если у вас и схожая идеология, то и в движение Free Software, но об этом позже
У этого доклада есть лицензия, смотря этот доклад вы принимаете её. Подробнее вы можете узнать по QR коду.
(Casual BY-SA 4.0 - QR код на лицензию в блоге)
<!-- 40s -->
<!-- интерактив -->
Кстати, поднимите руки те, кто уже выкладывал любые свои программы и скрипты на Github или ему подобные!
А теперь, пожалуйста, скажите пару слов о них! (2-3 человека)
<!-- +3 минуты? (вне счёта)-->
# Что такое OpenSource и Free Software?
И так, что такое OpenSource и Free Software?
Открытое программное обеспечение (OpenSource Software) — программы с открытым исходным кодом.
То есть это те программы, исходный код которых вы можете посмотреть, изменить, и распространять для любых целей.
Свободное программное обеспечение (Free Software) - программы, которые делают то же самое, но уважают "важнейшие" свободы пользователя, кстати вот эти 4 свободы:
(
0. Свобода запускать программу для любых целей.
1. Свобода изучать и изменять программу для ваших целей.
2. Свобода распространять копии.
3. Свобода распространять модифицированные версии.
)
Ничего не напоминает?
Так это получается ( OpenSource = Free Software )?
Не совсем. Разница кроется в идеологии программистов.
( OpenSource != Free Software )
<!-- нужен пример? -->
<!-- К примеру MetaSploit -->
<!-- 50s -->
## Идеология
Тут кстати нужно упоминуть о двух сообществах.
Open Source Initiative (OSI) - сообщество продвигающее OpenSource Software (OSS).
А также -
Free Software Foundation (FSF) - (Free, в переводе не "бесплатно", а "свободная") сообщество продвигающее Свободное ПО(Free software)
<!-- (икона со столманом) -->
А теперь о разнице OpenSource и Free. Помните те 4 свободы, которые о которых я сказал раньше?
Что исходный код можно посмотреть, изменить, и распространять для любых целей.
хоть и технически соблюдаются лицензией в OpenSource проектах, но соблюдение которых, может и не быть приоритетом самих программистов.
Приоритет у OpenSource разработчиков, это сделать надёжный и эффективный инструмент, который, в какой-то мере, может заменить коммерческие аналоги.
А приоритет у "Свободных" программистов, это предоставить пользователю упомянутые свободы, в процессе создания надёжного и эффективного инструмента.
Всё ещё не совсем ясно в чём конкретно разница, но сейчас объясню.
К примеру, калькулятор на Android от Google. Для него используется лицензия Apache 2.0. Она соблюдает свободы. Однако калькулятор на вашем телефоне - это не свободная программа. Даже если у вас AOSP версия андроида, то есть собраная из исходников, и ваш каклькулятор полностью неизменённая версия того самого калькулятора,
(мем - вы не можете просто так взять и установить калькулятор)
вы не можете просто так взять, изменить его код и обновить его на вашем телефоне. Вам буквально запрещено установить свою версию калькулятора поверх предустановленного. Да, это решается прошивкой телефона или получением root прав. Но. Тех, у кого AOSP версия андроида, или скажем LinageOS можно пересчитать по пальцам в этом зале. (Кстати, Поднимите руки те, у кого кастомные прошивки на телефоне (шутка - эй, ты, ты 11-ый, пожалуйста опусти руку, ты нарушаешь правила этого доклада :) )
А там, где вендор правит маскарадом, ситуация куда хуже.
Он вам может ставить тот же калькулятор, но модифицированный, и из-за изменений в коде и вы не получите исходники этого уже проприетарного калькулятора. А вот кстати так выглядит инструкция по получение Root на флагмане Xiaomi, кстати для этого вам нужно подождать месяц
(Скрин xiaomi)
Если бы калькулятор использовал GNU GPLv3 лицензию, то его можно было бы обновить на свою версию.
Очевидное решение - поставить ваш кастомный калькулятор не вместо стокового, а как обычное приложение. Но мне оно не нравится, по причине того, что я не люблю когда установлены лишние приложении, но что больше я не люблю, так это факт того, что я не знаю что, установлено на моём телефоне. Не новы случае, когда бэкдор уже предустановлен на телефон. А в случае Google, то везде где есть их сервисы, они по сути владеют Вашим телефоном.
(google don't be evil)
Они отправляют все ваши фотографии нейронке для провреки на запрещённый контент. У них доступ ко всем паролям от ваших сайтов. К вашим СМСкам и уведомлениям. Они могут обнулить или залочить ваш телефон в любой момент. В общем
(literally 1984)
А возвращаясь к Xiaomi, на их флагман просто нет кастомной прошивки.
<!-- Кстати распространяются программы на таких сервисах как GitHub, GitLab, SourceForge и куче других Git сервисов. Т.е. вы можете взять, найти понравившуюся вам программу на github, скачать, изменить её исходный код и выложить в открытый доступ. Кстати, этот процесс называется "Fork" (на экране вилка) -->
<!-- (мем со Столлманом и Линусом) (БЛЯЯЯ, Я ЗАБЫЛ ЧТО ЗА МЕМ) -->
<!-- 3.30m -->
Но вернёмся к OpenSource.
## Лицензии
Тут нужно кратенько рассказать про лицензии
Грубо говоря, для OpenSource у вас есть выбор использовать, либо Permissive, либо Copyleft лицензию.
Лицензия нужна для защиты разработчика и его продукта.
Permissive обеспечивает соблюдение свобод - исходный код можно посмотреть, изменить, и распространять для любых целей. Это к примеру MIT License.
Permissive и Copyleft лицензии очень похожи. Однако ключевое отличие - Permissive не запрещает приватизировать код. Т.е. корпорация может воспользоваться кодом из вашей программы, изменить её, и это уже будет её код.
(ah finally copyleft)
В случае же CopyLeft лицензии, компании нужно будет выложить любую модификацию вашей программы в открытый доступ под этой же лицензией. Т.е. просто взять и построить коммерческий продукт с такой лицензией не выйдет.
Пример CopyLeft лицензии - GNU GPLv3
<!-- 1m -->
## плюсы/минусы для разработчика
А теперь поговорим как изменится ваша жизнь, если вы выложите вашу программу или скрипт в OpenSource
Минусы:
- Недопонимания - как и в любой совместной разработке, это общение с людьми, нужно быть готовым к разнице в восприятии и подходов
Плюсы:
- Мотивация - Выложив программу в открытый доступ, Вы делаете мир лучше, это отлично мотивирует продолжать разработку. - Ричард Столлман, разрабатывал набор утилит GNU, чтоб все могли ими пользоваться. Его команда собрали то, какой мы видем GNU/Linux сейчас.
<!-- Компании по всему миру используют OpenSource продукты. Один из самых популярных, я бы назвал GNU/Linux. Они чуть ли не основа таких больших корпораций, как Google. -->
- Репутация - Вы становитесь более узнаваемым в комьюнити, вас могут приглашать на эвенты и предлагать работу. - К примеру H.D. Мур, создатель Metasploit благодаря своему инструменту попал на множество мероприятий и на пост главного исследователя в Rapid7.
- Портфолио - Если вы будете устраиваться на работу, это будет плюсом, если у вас будут OpenSource проекты. - Для примера далеко ходить не нужно, в моём прошлом собеседовании меня попросили скинуть профиль на github.
- Рост - Делая OpenSource проект, он будет получать изменения от других программистов, которые помогут вам вырости как специалисту и поднять уровень ваших навыкови кода. - Возвращаясь к Муру, он сильно прокачался в написании эксплоитов при работе над Metasploit.
- Качество кода - вы будете писать код будет качественно, если будете знать, что его может увидеть абсолютно любой, чем если бы написали на коленке для себя. - в психологии это называется Эффект Хоторна.
<!-- 2m -->
## плюсы/минусы для пользователя
А теперь про плюсы и минусы для пользователя
Минусы:
- Поддержка - её может и не быть, а разработка проекта может закончиться через месяц. - Я так одному ютуберу, который выложил свой скрипт вкинул несколько улучшений, но он забросил проект.
- Безопасность - нет гарантии, что программа безопасна, скачивание OpenSource утилит не отличается от скачивания крякнутых программ, если вы конечно не прочитаете исходный код. - Недавний нашумевший пример - это библеотека XZ, которая почти поставила на все обновлённые системы бэкдор.
- Гарантии - если программа поведёт себя как-то не так и приведёт к потере данных, никто не будет нести за это ответственность, кроме самого пользователя
- Документация - Наличие, актуальность и точность документации также не гарантировано. - Помнится я нашёл одну очень специфичную библиотеку на Python, которая решала мою проблему, но как ей пользоваться, я узнал изучая её исходный код.
Плюсы:
- Цена - бери и качай. Все OpenSource программы бесплатны для использования.
- Платформы - OSS зачастую поддерживает больше платформ, чем проприетарный софт. К примеру, Adobe намеренно не разрабатывает Linux версию Photoshop, хотя у них есть версия под MacOS. А условная Krita, есть на всех платформах, да и вроде даже на Android.
- Владение - то, что вы скачали, будет работать на любой другой схожей системе, эта программа принадлежит вам (в рамках лицензии) и у вас её не могут отнять. К примеру, у одного музыканта была прога по типу FL Studio, которую он купил в 10 лет назад. После этого вышло несколько новых версий которые сильно отличались от этой. Севрис онлайн активации отключили, а его комп поломался. И из-за этого он не смог активировать старую версию программы, а техподдержка отказалась помогать ему, не смотря, что лицензия продукта позволяла продолжать использовать старую версию. А ему нужна именно эта версия для его работы. В итоге у него отняли то, что он купил.
- Безопасность - Пользователь может сам удостовериться, что программа безопасна и соответствует заявлениям разработчиков или вашим нуждам - вспоминая пример про XZ - иследователь нашёл бэкдор, а в проприетарном софте, к примеру Windows, он бы и остался необноруженным какое-то время.
- Кастомизация - Пользователь может доработать программу, чтоб она соответсвовала его нуждам. - Не нравится цвет окошка? Подправьте его и пользуйтесь программой. Или вам не нравится какое-то навязчивое окошечко или настройки по умолчанию. Вы можете всё это изменить.
- Community - любой пользователь может помочь разработчику с проектом. И речь не только о написании кода, это также помощь с обсуждением и предложением новых функций, написанием документации, поддержкой пользователей, созданием отчётов о багах или тестах программы. Каждый может помочь в разработке, внезависимости от умений, и получить от этого новые навыки. - К примеру разработчики сервера виртуализации Proxmox, получает больше фидбека от пользователей, чем от компаний. А некоторые пользователи сами им скидывают как исправить их программу, и это не просто костыль, а прям кусок кода, который основательно фиксит проблему.
<!-- 1.50 + 1.15 = 3.10m -->
<!-- =11.20 -->
<!-- skip -->
# Особенности написания хакерских утилит
А теперь я расскажу про пример, какого это писать крутой хакерский инструмент
## OpenSource = суматоха в жизни
И наш герой H.D. Мур, создатель и разработчик, легендарного хакерского инструмента - Metasploit
### пример - Metasploit
В 90-ых Муру было 18 лет, ему в этом возрасте предложили первую работу в ИБ, в частности пентестером.
Но в то время было сложно получить эксплоиты, это сейчас мы просто берём и пишим в гугле, программу, её версию и "exploit". А тогда их так просто было не получить, нужно было искать людей в IRC чатах
(IRC скрин)
, у которых могли бы быть эти эксплоиты. И когда комп Мура был хаотично забит разными эксплоитами без организации и разными вариантами запуска, он решил объеденить все доступные ему эксплоиты в одну программу которую назвал Metasploit. Запустив её, вы можете выбрать эксплоит, ввести входные данные и запустить его.
(вопрос к аудитории - А теперь вопрос к аудитории - представьте, вы босс компании по информационной безопасности, и ваш сотрудник показывает вам свою программу, которая может дать __любому__ возможность взломать любую компанию. Как бы вы поступили?)
В правильных руках - это инструмент, который поможет защитить множество компаний от взломов, а в неправильных руках, это самое настоящие кибер-оружие. И когда Мур показал это своему нанимателю, он не особо поддерживал его инструмент, точнее, он боялся его. Компания не хотела быть связана с Metasploit и со всем, что делал Мур, но и в то же время они не могли от него избавиться, так как Мур выполнял большинство активных пентестов.
И вот, в 2003 год, он начал распространять Metasploit бесплатно, более того, Open-Source, на сайте metasploit.com. И это сразу же вызвало серьёзное народное волнение, причём казалось, что никто не остался в стороне:
- компания на которую работал Мур,
- клиенты,
- black hat хакеры,
- хакеры с даркнета, которые пишут эксплоиты,
- другие пентестеры, потому что они считали, что Мур крадёт их работу, выпуская такой мощный и простой для использования инструмент.
И много недовольных захотели положить его сайт. Попытки взлома, DDoS'ы, , всё дошло до того, что 1 хакер, у которого не получалось взломать сайт, взломал провайдера Мура. Под атаку попал не только сайт, но и сам Мур, у него пытались украсть личность, оклеветать его в сети, всё что можете представить. Успешно атаковать на Мура не выходило, вот и кто-то решил атаковать работодателя Мура.
Боссу Мура приходили письма с требованием уволить Мура, за то, что он делал в нерабочее время, так как считали, что то, что он выкладывает эксплоиты, это безответственно. Но это лишь сподвигло Мура работать усерднее над своим инструментом.
Но естевственно не только хакеры и покупатели былли недовольны, также были недовольны и вендоры, разработчики программ, для которых Мур выкладывал эксплоиты. И чтоб компания Мура могла работала с вендорами, они хотели, чтоб не было эксплоитов для их продуктов в Metasploit.
Муру нарвилось всё это, ему нравилось быть как и быть в пентесте атакующим, так и целью атаки одновременно.
Позже Мур добавил инструмент Meterpreter, который делал Metasploit практически вирусом
И помимо хакеров, его инструмент не нравился правительству. Всё это время у него были в запасе деньги, на которые он нанял бы адвоката, если бы его ночью арестовали. Но ничего такого не произошло.
Постепенно команда работающая над Metasploit - начала составлять 200 разработчиков
И в 2009 году, когда у Мура были долги, стартап, который не приносил денег и беременная жена, компания Rapid7 предложила у него купить Metasploit. И в итоге мы имеем OpenSource версию Metasploit и проприетарную Pro версию. А Мур получил высокооплачиваюмую работу, а также компанию, которая вступилась за него и его проект.
Теперь Metasploit не просто инструмент для пентестеров, а этому учат даже в школах! Программа Мура прошла сквозь ненависть всего мира к общепринятому стандарту.
Сейчас Мур уволился из Rapid7 и у него своя компания.
(Source https://darknetdiaries.com/episode/114/)
<!-- 4m +5m на вопрос -->
# Как писать программы, если вы не программист?
На этом этапе я надеюсь, что убедил вас, что OpenSource это круто. Но теперь нужно узнать, как влиться в OpenSource в качестве разработчика.
Мы сейчас быстренько пройдёмся по курсу молодого бойца, чтоб выйдя с этого доклада вы уже были готовы начать писать свою программу.
<!-- 20s -->
## Язык программирования
Про то, на чём писать вашу прогу.
Тут можно начать очередной холивар за язык программирования, но я скажу, что самый крутой язык будет - англисйкий! Он невероятно поможет в изучении практически чего угодно.
<!-- Хоть и речь идёт про язык программирования, я скажу то, что невероятно сильным плюсом для вас будет знание английского языка, не только в программирование, но и в пентесте. -->
А относительно языка программирования, если вы не знаете какой выбрать для написания пентестерских инструментов или у вас нет опыта, то выбирайте GoLang, или просто Go.
Только не показывайте друзьям их маскот
<!-- 30s -->
### Как ему научиться
И как научиться Go?
Мне не нравится сидеть и монотонно изучать язык по книге, по этому я считаю, чтоб научиться писать, нужно просто
(just do it)
начать пробывать писать свой код и читать чужой, а в процессе вы изучите язык.
Однако, если вы всё-же хотите посидеть и почитать, особенно, если вы до этого в жизни не видели программный код, то я советую:
1. оффициальный туториал о том как запустить Go на вашем компьютере,
2. затем интерактивную экскурсию по языку,
3. и в заключении перейти к туториалу на основе примеров.
Так вы получите отличную базу.
(стрелочки от ссылке к ссылке)
https://go.dev/doc/tutorial/getting-started
https://go.dev/tour
https://gobyexample.com/
<!-- 40s -->
## Как ~~программировать~~ гуглить
Если вы думаете, что крутые программисты, сидят и просто пишут код, то вы не правы, программисты пишут код примерно так:
(Мем как пишут успешные программисты код - google)
Хоть это и звучит смешно, но первым делом, нужно научиться гуглить самостоятельно. Я говорю это, потому что я встречал много людей которые не могут это делать.
1. Гуглите на английском. Так куда больше шансов найти что ответ.
2. Конструкция запроса, примерно такая "язык программирования, что вы хотите"
<!-- pro tip: в случае с go, используйте "golang что-то", так его обозначают, чтоб не путать с английским словом Go -->
<!-- ({Go = идти {Go = GoLang, но GoLang != идти) -->
3. Иногда вы не получите ответ, в таком случае вам нужно перефразировать вопрос, в крайнем случае вы можете обратиться к ChatGPT чтоб перефразировал для вас или. Но не используйте ChatGPT для получения самого ответа на ваш вопрос
4. Не просите помощи на форумах и у знакомых, пока не потратили хотя бы 25 минут на поиск решения, вы должны научиться сами справлять с такими проблемами
<!-- 1m -->
## ОС
И пару слов об вашей операционке. Я настаятельно рекомендую установить и начать осваиваться GNU/Linux. Также и в ней программировать.
<!-- И пару слов об вашей операционке. Я настаятельно рекомендую установить Linux. -->
<!-- -->
<!-- В идеале вместо вашей винды, -->
<!-- но я рекомендую начать с установки рядом с вашей виндой, т.е. при включении компьютера, вы сможете выбрать, что запускать, винду или линукс. -->
<!-- Но для тех, кому пока ещё сложно с компьютерами то установите линукс на виртуальную машину. -->
<!-- -->
<!-- (логотипы) -->
<!-- А в качестве ОС, это Kubuntu, или если вы хотите приключения и сложности для более быстрого прокачивания навков, то Arch Linux (btw) -->
<!-- -->
<!-- Гайдов очень много на каждый из вариантов установок, главное будьте осторожны. -->
<!-- 15s -->
## Git и все-все-все
А теперь про Git
Git - это система контроля версий. Это программа позвоялет откатывать изменения в файлах до предыдущего их сохранения.
Также она помогает работать нескольким людям над проектом. Т.е. она умеет совмещать изменения сделаные несколькими разработчиками.
Есть сервисы, которые предоставляют доступ к git репозиториям, самый популярный - GitHub. На него мы и будем загружать наш проект
<!-- А по этой ссылке вы увидете решения типичных проблем с git - https://ohshitgit.com/ru -->
<!-- (qr) -->
<!-- 35s -->
## Guidelines по созданию OpenSource проекта
Так как же сделать свой OpenSource проект?
(сделать скрины к каждому элоементу)
0. Зарегестрируйтесь на Github
1. Создайте Git репозиторий
2. Выберете лицензию
- MIT, если не знаете что выбрать
- GNU GPLv3, если вы хотите, чтоб ваш проект был свободным ПО
3. Склонируйте репозиторий `git clone REPO_LINK`
Однако если мы склонируем по SSH ссылке, мы получим ошибку. Т.к. сам github говорит, что мы не добавили SSH ключ в наш аккаунт.
Нажимаем по ссылке, а пока идём в терминал и генерируем SSH ключ с помощью `ssh-keygen`, нажимаем 3 раза enter. Выводим публичный SSH ключ с помощью `cat` и копируем его.
Далее вставляем в наши SSH ключи на Github. После этого мы сможем скачивать репозитории по SSH и загружать изменения, что предотвратит проблемы в будущем.
4. Составьте план разработки
Вам нужно:
- Запишисать какие функции должна выполнять программа
- Запишисать какие входные данные нужны для неё
- Разбейить эти функции на мельчайшие компоненты, шаги, который должны выполнить программа
- поставьте для них приоритеты:
- базовые/необходимые функции
- дополнительные функции
- улучшения
К примеру, изначальная идея:
"Я хочу написать программу, которая будет помогать определить работает ли DOS на сайт, то есть сравнить скорость ответа от веб сервера до того как я начну атаку и после (назовём это DOS Checker), а также было бы круто, если бы она делала это в реальном времени и с красивым интерфейсом. Также нужна возможность вставлять кастомные Header'ы и делать POST запросы, если мы ломаем что-то на бэкэнде. А также хочется иметь возможность проверить, правильно ли происходят запросы, так что нужна поддержка http proxy для перехвата запросов. И для точности измерений, пусть она делает несколько запросов и вычесляет среднее время ответа."
В качестве входных данных нам нужны: опрашиваемая URL страница, тип запроса GET/POST (по умолчанию GET), тело запроса (для POST), ссылка на http proxy и запускать ли в режиме мониторинга.
Теперь нужно разбить эти функции на мельчайшие шаги:
- DOS Checker:
- получить ссылку из терминала
- Записать её в переменную
- с помощью библеотеки, сделать GET запрос к ссылке
- получить из библеотеки время ответа
- записать в переменную
- дать пользователю запустить атаку, то есть будем ждать нажатия любой кнопки
- повторить процедуру
- сравнить перемынные, если время ответа увеличилось в 2 раза или больше, значит атака успешна
- http proxy
- получить переменную из флага терминала
- если переменная не пуста, значит устанавливаем её в качестве прокси в библеотеке во всех функциях
- POST запросы + тело запроса
- Сделать отдельную функцию, которая будет делать POST запросы, на вход принимать тело запроса
- если POST флаг присутсвует, то вместо функции GET запроса, отправляем POST запрос с переменной из фалга тела запроса
- кастомные header'ы
- если флаг не пустой, то добавить его в header'ы всех функций, которые делают запросы
<!-- - среднее время ответа -->
<!-- - если присутствует флаг, сделать несколько запросов через промежутки времени вместо одного запроса, получить их время ответа -->
<!-- - вычислить среднее время ответа -->
- Режим мониторинга
- найти библеотеку для красивого отображения терминального интерфейса
- представить как оно должно выглядеть
- ...
А теперь приоритеты:
Необходимые функции:
- DOS Checker
- http proxy
Дополнительные функции:
- среднее время ответа
- POST запросы
Улучшения
- кастомные header'ы
- режим мониторинга
5. Начните разрабатывать вашу программу начиная с базовых функций
Просто садитесь и старайтесь сделать тот элемент, которую вы хотите. Гугл вам в помощь. Если гугл не даёт вам нужных результатов, значит нужно разбить функцию на ещё более маленькие элементы.
и как привнесёте нужные изменения, проверьте, что прграмма функционирует как вы хотит. Затем загрузите изменеия в репозиторий с помощью комманд `git add . && git commit -am 'новая фича' && git push`.
Однако вы наверняка столкнётесь с тем, что git не знает кто вы, по этому он попросит вас добавить ваш email и имя командами `git config`.
А, `git add .` - добавляет новые файлы в репозиторий
`git commit -am 'новая фича'` - фиксирует сохранение измений, к которым можно потом вернуться
`git push` - загружает их на GitHub. Для этого нужно будет добавит SSH ключ вашего ПК в Github аккаунт, но мы уже это сделали.
После этого наши локальные изменения отобразятся на github.
6. Напишите README
README, это простой текстовый файл, который описывает ваш проект, и это первое, что увидет потенциальный пользователь в вашем инструменте.
README должен ответить на вопросы
- Что делает проект?
- Почему он будет полезен, то есть какой usecase?
- Как мне установить и попробывать его?
- Какие есть функции и как ими пользоваться? То есть небольшная документация
И сейчас я расскажу свой опыт разработки
<!-- 5.30m (но я торопился, так что 6.30m) -->
## пример - owncloud_bruteforcer
Во время пентеста, я нашёл owncloud сервис. Owncloud - это OpenSource облачное хранилище, которое можно развернуть на своём сервере. И сделав несколько попыток авторизации, я заметил, что сервис их не блокирует. Я решил, что можно перебирать пароли для пользователей, сделать отчёт и получить за него вознаграждение.
Вот только возникла проблема, я не нашёл программу, которая могла выполнить все требования owncloud для авторизации. Видите ли, owncloud нужно для авторизации:
- валидный CSRF токен, который можно получить в теле страницы логина
(показать как на owncloud оно в исходниках)
- cookie, которые можно получить в header'ах ответа
(показать как на owncloud оно в header'ах сервера)
- а также определённые Header'ы в запросе, по типу "accept", которое приложение ожидает от клиента
(показать как на запросах он идёт)
Я хочу написать bruteforcer, т.е. программу, которая пытается найти нужный пароль для пользователя, пытаясь авторизорваться с помощью wordlist'a, т.е. файла с паролями. Более того, я хочу иметь возможность атаковать сразу нескольких пользователей одной командой, предоставляя вместо имени пользователя, файл с пользователями. А в случае с owncloud, перед каждой попыткой авторизоваться, программа должна перейти на страницу логина, чтоб получить CSRF токен и cookie.
<!-- 1.30m -->
### Идея
( визуализировать то о чём я говорю, т.е. каждый элемент)
И так, идея была проста, нам нужно:
- получить входные данные через флаги запуска программы
- с возможностью атаковать либо одного юзера, либо сразу множество из файла
- получить CSRF токен с cookie
- то есть сделать GET запрос на страницу логина
- с помощью регулярных выражений вычленить от туда токен
- с помощью регулярных выражений вычленить cookie из Header'ов
- и вставить их в переменные
- использовать файлом с паролями, для перебора
- попытаться авторизоваться
<!-- (только сейчас клик) -->
- в цикле запускается несколько воркеров, паралельных операций, которые будут пытаться авторизоваться
- каждый воркер, получает новый CSRF токен, а заодно и cookie
- каждый из воркеров берёт следующий пароль из wordlist'a и пытается авторизоваться, т.е. делает POST запрос подставляя username и пароль в тело запроса
- происходит проверка успешности авторизации через то, что ответит сервер на запрос
<!-- 2.50m (слишком торопился) -->
### Разработка
Во время разработки, я понял, что очень неудобно дебажить работает ли попытка авторизация, выводя весь пакет в терминале, по этому нужно добавить поддержку http proxy, чтоб я мог смотреть его в burp и иметь возможность проверить, что мы успешно авторизуемся
(скрин бурпа)
(сделать, чтоб по нажатии он добавлялся в презенташку в список идей)
Во время разработки были баги, много багов. Помимо скучных и не совсем понятных багов, был и неожиданный:
Суть в том, что я изначально использовал channel, Channel в Go используется для передачи данных между разными частями программы, которые работают параллельно. Вы можете представить себе channel как трубку, через которую данные могут быть переданы из одной части программы в другую. И в эту трубку можно ложить какое-то количество переменных,где они выстраиваются в очередь,
После извлечения переменной из канала, она пропадает. Это решение отлично подходило в моём случае, потому что, у меня несколько воркеров, каждому из которых нужен следующий по списку, неиспользованный пароль.
Так в чём заключалается проблема в этом псевдокоде?
<!-- 1.30m -->
(псевдокод, упрощён для понимания)
```go
func main() {
// делаем что-то
for _,user := range users { // Цикл, для каждого пользователя выполнится код ниже.
// а также получаем переменную user, из массива users
pass := make(chan string, 15000001) // Создаём канал pass, с буффером в 15млн переменных.
// rockyou - 14,344,391
for passwords.Scan() { // Для каждого пароля из всех паролей из файла
pass <- string(passwords.Text()) // добавим пароль в канал pass
}
close(pass) // закрываем канал, чтоб функция bruteforce
// не ждала новых переменных в канале
for i:=0; i<10; i++ { // выполняем цикл 10 раз,
go bruteforce(user,pass) // go - запустить паралельно функцию.
// В следствии чего запускаем 10 функций bruteforce,
// которые в цикле читают пароли из канала
}
}
}
```
(3 минуты таймаут)У вас 3 минуты, можете поднимать руку и высказывать предположения. Дам подсказку, этот баг в итоге сожрёт всю оперативу, почему именно это происходит?
Дам ещё подсказку, вот так можно на скорую руку, починить проблему
```go
func main() {
// делаем что-то
for _,user := range users {
pass := make(chan string, 15000001)
for passwords.Scan() {
pass <- string(passwords.Text())
}
close(pass)
for i:=0; i<10; i++ {
go bruteforce(user,pass)
}
runtime.GC() // Чистим память от неиспользуемых переменных
}
}
```
В общем проблема заключается в том, что чистильщик памяти (garbage collector) в Go, не успевает чистить память от уже неиспользуеммых каналов которые создаются в цикле. Но при этом варианте, программа всё ещё занимает под 250МБ памяти, что как минимум, не то, что я от неё ожидаю. Так что финальное решение стало:
<!---->
```go
func main() {
// делаем что-то
for _,user := range users {
pass := make(chan string, 1000) // Меняем буфер на 1000 элементов
// т.е. мы ожидаем, что одновременно
// будет работать меньше 1000 потоков
go func(){ // запускаем добавление паролей в фоне
for passwords.Scan() {
pass <- string(passwords.Text())
}
close(pass)
}()
for i:=0; i<10; i++ {
go bruteforce(user,pass)
}
}
}
```
То есть программа запускает фоновый процесс, который добавляет пароли пока не заполнится буфер в 1000 элементов, а как место освободится, он добавляет новые пароли. В то же время дальше паралельно запускаются воркеры, которые уже брутфорсят пароль юзера
и не отходя далеко от темы багов можно поговорить за медленное программирование и cult of done, потому что у финального решения есть недостаток - мы для каждого пользователя по новой читаем файл с паролями, а если у нас пароли на медленном и умирающем жёстком диске, то это как минимум замедлит брутфорс. Тем не менее, это решение работает в рамках того какие баги я могу допустить.
Т.е. к багам, лично для меня есть 2 варианта подхода:
Медленное программирование
и
Следовать манифесту Cult of Done
Что такое медленное программирование? - Это когда вы программируете, не для того, чтоб выполнить задачу, а чтобы заниматься творчеством и получать удовольствие от этого. То есть вы медленно, спокойно, пытаетесь решить проблему, элемент кода, самым эффективным решением. И много людей получают от этого кайф.
И второй вариант это следовать манифесту Cult of Done, он не про программирование, но он про то как быстрее делать задачи. А ещё он короткий и мне нравится, вот часть манифеста:
2.Смиритесь: всё, что вы делаете это "черновой вариант". Так проще завершить работу. - Ожидайте, что ваш проект никогда не будет законченным, он не будет иметь всех функций, иметь самый оптимизированный код, или полнуй документацию.
3.Этапа "редактирования" не существует. - Если вы считаете, что вот вы напишите сейчас основные функции программы, а потом начнёте их оптимизировать, то знайте, этого либо не будет, либо займёт непомерно много времени. По этому нужно писать хорошее решение сразу.
7.Сделав что-то, можно про это забыть. - написали программу? Забудьте про её поддержку. У вас и так достаточно проектов над которыми вам нужно работать.
8.Смейтесь над совершенством. Оно скучно и мешает вам завершить результат. - хоть я и перфекционист, но вы никогда не закончите проект, если будете делать его идеальным
10.Поражение тоже считается завершённостью. Совершайте ошибки. - если у вас не вышло написать программу, то вы всё ещё в выйгрыше, вы узнали что-то новое и в следующий раз сделаете лучше.
Какой подход лучше - решать исключительно вам.
Но что для меня оказалось более неожиданным, так это то как реагирует owncloud на мою прогрмму.
Оказывается, помимо программы по брутфорсу паролей, я написал программу по DoS-у. Когда я тестил программу в своей лабе, я заметил, owncloud грузит процессор на 100%.
(скрин)
Я вам расказываю про баги, для того, чтоб вы понимали, что ошибки в процессе - это совершенно нормально, без ошибок, ваша программа, и особенно вы, не станете лучше. Совершайте ошибки.
Изучить финальную программу можно по qr коду, а вот так работает программа
(Демка)
<!---->
# Выводы
И так, резумируем доклад. Вы сегодня узнали:
- Узнали про OpenSource, виды лицензий и Free Software
- Узнали что будет если написать революционный хакерский инструмент (metasploit)
- узнали как сделать свой первый OpenSource проект, а это:
- сделать Git репозиторий,
- составить план разработки,
- выставить приоритеты для функций программы,
- разделить их на самые малые шаги,
- и начать писать
<!-- 30s -->
## Community track блиц
А теперь небольшой Community track блиц:
1) Чего не хватает в современных профессиональных сообществах?
Я считаю, что не хватает открытости, к примеру крайне мало пентестеров пишут о том как ищут уязвимости, какая у них методология и в каком случае она подходит. Особенно если в краткой форме. Мне лично очень этого не хватает, так что я пишу такие методологии для себя и буду делиться ими в своём блоге.
2) Представь, что проекты, которые ты описал в докладе не были созданы. Как бы ты решал исходную задачу?
Я говорил про metasploit, Git, GoLang, а также про owncloud_bruteforcer
- Как по мне, Metasploit сделал ИБ сообщество таким, которое оно есть сейчас. Но если бы оно никак не повлияло на ход истории, то я бы просто пользовался exploit-db, т.к. там уже есть эксплоиты из metasploit.
- Если бы у нас не было git, то программисты делились бы кодом, в zip архивах и это было бы коллабарационный ад. Разработка затягивалась бы в десятки раз. А я сам бы пользовался контролем версий в Nextcloud, а также снапшотами BTRFS.
- Не будь у нас Go, я бы наверное писал на C++ или python, но потихоньку переходил бы на rust.
- Если бы я не написал owncloud_bruteforcer - я бы сделал скриптец, который через curl'ы имитировал бы мою программу. Но разработка бы затянулась, чтоб сделать процесс мультипоточным.
3) Какой open source проект тебе хотелось бы создать если будет больше времени/ресурсов?
Я уже начал разработку такого проекта, но из-за доклада он на паузе. Это Ruina - моя автоматизация Recon'а для пентеста. Как допишу до первой стабильной версии - выложу в opensource и сообщу в своём блоге.
<!-- Если получится интегрировать в канву доклада, то хорошо) Можно просто перед последним слайдом "Спасибо". Сделать слайд "Community track блиц" с этими вопросами и кратко ответить) -->
<!-- Основная идея в том, чтобы узнать ваше мнение и побудить слушателей глубже задуматься об открытых проектах и сообществах. -->
<!-- Ответы не должны быть длинные, чтобы не отнимать время вашего доклада. Буквально по минуте рассуждений в свободной форме. -->
Вы можете оставить фидбек для меня, а также найти транскрипцию доклада, и материалы к ней по QR коду далее
(TODO транскрипция доклада, и материалы по QR коду)
(qr код на фидбек)
<!-- 2.30m -->
## Final
<!-- (плот твист с закрытой лицензией доклада) -->
И раз уж вы все досмотрели этото доклад до конца, вы обязаны выполнять условия лицензии, я зачитаю несколько из секции 7.
- Будьте этичными хакерами
- Делитесь исходным кодом своих программ
- Позвоните маме и сделайте комплимент.
(qr код на лицензию + фотка интересной части)
<!-- И вот вам FunFact - Эта призентация была на столько большая, что изначально она была на полтора часа -->
Источники.
Спасибо за внимание!
<!-- 25s -->
---
# источники
https://choosealicense.com/
https://www.youtube.com/watch?v=B5GF3ror7WI
https://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5
https://stackoverflow.com/questions/3902754/mit-vs-gpl-license
https://www.gnu.org/philosophy/open-source-misses-the-point.html
https://dev.to/opensauced/open-source-101-a-beginners-guide-to-getting-started-37fb
https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%BF%D1%80%D0%B8%D0%B5%D1%82%D0%B0%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5
<!-- https://www.theverge.com/2023/12/5/23989290/playstation-digital-ownership-sucks -->
<!-- https://www.reddit.com/r/playstation/comments/pso78i/sony_has_permanently_banned_my_ps5_reported/ -->
https://www.gnu.org/proprietary/proprietary.html
https://www.gnu.org/philosophy/open-source-misses-the-point.html
https://www.gnu.org/philosophy/free-sw.html
https://www.quora.com/What-are-examples-of-open-source-software-that-are-not-free-software
https://opensource.guide/starting-a-project/
https://www.makeareadme.com/
https://gist.github.com/PurpleBooth/109311bb0361f32d87a2
https://darknetdiaries.com/transcript/111/
https://www.infosecinstitute.com/resources/malware-analysis/malware-as-a-service/
https://habr.com/ru/articles/727464/
https://www.labirint.ru/books/495586/
чатик standoff365
https://cleverics.ru/digital/2012/05/cult-of-done/
https://www.youtube.com/watch?v=bJQj1uKtnus
https://kata.academy/article/kak-pravilno-guglit-programmistu
https://en.wikipedia.org/wiki/Permissive_software_license
https://en.wikipedia.org/wiki/MIT_License
https://en.wikipedia.org/wiki/Apache_License
lurk
https://securelist.ru/the-hunt-for-lurk/29220/
https://securelist.ru/bankovskij-troyanec-lurk-specialno-dlya-rossii/28708/
https://www.interfax.ru/russia/821938
https://www.kommersant.ru/doc/5216634
https://unit42.paloaltonetworks.com/unit42-understanding-angler-exploit-kit-part-1-exploit-kit-fundamentals/
https://i.redd.it/oy3zh5xhyra91.png
https://vc.ru/legal/130439-polzovatelskoe-soglashenie-pyat-sovetov-ot-yurista
https://yandex.ru/legal/rules/
https://kata.academy/article/kak-pravilno-guglit-programmistu
https://exploringyourmind.com/the-hawthorne-effect-we-change-when-people-watch-us/
https://www.gnu.org/philosophy/free-sw.ru.html
https://opensource.org/osd
---
медиа
https://cdn.business2community.com/wp-content/uploads/2015/06/Open-Source-Logo-517x500.png.png
https://pngimg.com/uploads/hacker/hacker_PNG23.png
https://img2.joyreactor.cc/pics/post/geek-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D0%B8%D1%81%D0%BA-6555426.png
https://www.pngegg.com/en/png-twwdz
https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fwiki.installgentoo.com%2Fimages%2Fthumb%2Fb%2Fba%2FSaintstallman.png%2F240px-Saintstallman.png&f=1&nofb=1&ipt=17158a05b6e2ede086b09fd610edd9d2c3ce82f70b251c657131e3c4e7816ada&ipo=images
https://www.meme-arsenal.com/create/meme/12552572
https://programmerhumor.io/wp-content/uploads/2021/07/programmerhumor-io-programming-memes-7bab27ca853c90a-768x516.jpg
https://dazeinfo.com/wp-content/uploads/2012/04/Google-dont-be-evil1.jpg
https://programmerhumor.io/wp-content/uploads/2021/07/programmerhumor-io-programming-memes-7bab27ca853c90a-768x516.jpg
https://logos-world.net/wp-content/uploads/2020/09/Google-Logo.png
https://pplware.sapo.pt/wp-content/uploads/2011/06/metasploit_logo.png
https://atomrace.com/blog/wp-content/uploads/2017/10/metasploit-logo-300x300.png
https://upload.wikimedia.org/wikipedia/commons/c/c9/Hdm2018.png
https://www.inforte.com/wp-content/uploads/2020/12/rapid-logo-mup.jpg
https://ashitani.jp/golangtips/gopher.png
https://gowithcode.com/wp-content/uploads/2021/04/top-programming-languages.jpg
https://avatanplus.com/files/resources/original/570a76716c3a215400deab23.png
https://www.freeiconspng.com/img/44299
https://www.dirjournal.com/info/wp-content/uploads/2012/02/UK-Flag-1.jpg
https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.meme-arsenal.com%2Fcreate%2Ftemplate%2F8677148&psig=AOvVaw3TWd4xa5Hr6ALcJMMO9TDs&ust=1715354545860000&source=images&cd=vfe&opi=89978449&ved=0CBAQjRxqFwoTCJC4oOXvgIYDFQAAAAAdAAAAABAE
https://www.google.com/imgres?q=just%20do%20it%20meme&imgurl=https%3A%2F%2Fi.giphy.com%2Fmedia%2Fb7f0X8Okk1uyk%2Fsource.gif&imgrefurl=https%3A%2F%2Fdev.to%2Fspences10%2Fcomment%2Fhge&docid=eUXoB89XLopxnM&tbnid=Kl1WOHnH41Hn8M&vet=12ahUKEwjk6fKu8ICGAxWzKhAIHTdRA5QQM3oECGsQAA..i&w=1280&h=720&hcb=2&ved=2ahUKEwjk6fKu8ICGAxWzKhAIHTdRA5QQM3oECGsQAA
https://computergeek.nl/wp-content/uploads/2015/01/linux-tux_00378819-1024x768.jpg
https://carbon.now.sh
https://github.com/charmbracelet/vhs
https://www.youtube.com/watch?v=sqBvq0_UF6M
https://doc.owncloud.com/webui/next/classic_ui/webinterface.html
https://stackoverflow.com/questions/28958192/no-output-from-goroutine
https://go.dev/play/p/584-MAYeMUL
https://gobyexample.com/command-line-flags
https://gobyexample.com/channels
http://color.aurlien.net/#212121

BIN
content/hidden/test.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

View File

@ -4,7 +4,7 @@ draft = false
+++ +++
Chat with me on: Chat with me on:
- XMPP: casual@pwned.life - XMPP: [casual@pwned.life](xmpp://casual@pwned.life)
Or write your message here (with contact information) and I will contact you: Or write your message here (with contact information) and I will contact you:
<!--more--> <!--more-->

View File

@ -53,7 +53,7 @@ params:
author: "Casual" author: "Casual"
email: c@sual.in # used for microformats email: c@sual.in # used for microformats
avatar: "/images/me.png" # used for microformats avatar: "/images/me.png" # used for microformats
description: "casual description #TODO" description: "Hacking blog"
# Uncomment if you need this # Uncomment if you need this
# images: # images:
# - images/og-featured.png # relative path to "static" directory # - images/og-featured.png # relative path to "static" directory
@ -63,7 +63,7 @@ params:
# - js/main.js # relative path to "assets" directory # - js/main.js # relative path to "assets" directory
# dateFormat: "29.01.2024" # dateFormat: "29.01.2024"
# dateFormat: "29.01.2024" # dateFormat: "29.01.2024"
paginationSinglePost: true paginationSinglePost: false
style: dark-without-switcher style: dark-without-switcher
mainSections: [ "blog" ] # which sections should be on index/main page mainSections: [ "blog" ] # which sections should be on index/main page
sectionsWithFullContentOnListPage: [ "notes" ] # for which sections content should be displayed on list pages sectionsWithFullContentOnListPage: [ "notes" ] # for which sections content should be displayed on list pages
@ -114,10 +114,10 @@ params:
# icon: "hugo" # icon: "hugo"
#test rm me #test rm me
# markup: markup:
# goldmark: goldmark:
# renderer: renderer:
# unsafe: true # enable raw HTML in Markdown unsafe: true # enable raw HTML in Markdown
# module: # module:
# imports: # imports:
# - disable: false # - disable: false

Binary file not shown.

Binary file not shown.