TECH_B0LT_GENONA Telegram 5725
Есть такой популярный в узких кругах инструмент Valgrind
https://valgrind.org/docs/manual/QuickStart.html

Создан он для того, чтобы искать утечки памяти, оценивать управление памятью и в целом профилировать её.

О Valgrind я упоминал ранее
https://www.tgoop.com/tech_b0lt_Genona/4832
https://www.tgoop.com/tech_b0lt_Genona/5340

Чаще всего, из того что я видел, Valgrind использовался для программ написанных на C\C++. Это и логично учитывая, сколько проблем там возникает из-за работы с памятью.

И тут ВНЕЗАПНО11!! его поддержку завезли в Go.

Вот обсуждение из 2010 года (самое раннее, которое нашёл), где интересуются, а есть ли что-то похожее для Go
https://groups.google.com/g/golang-nuts/c/Vy5dDw0-fCY

Также я находил посты в которых пытались дебажить и Go-шный софт

Вот, например
Hunting down a C memory leak in a Go program
https://zendesk.engineering/hunting-down-a-c-memory-leak-in-a-go-program-2d08b24b617d

Но там возникали проблемы

> Our app is actually correctly freeing it’s “leaked” memory before it exits. Valgrind produces its leak report at the end of program execution by comparing what it gave out by malloc to what it received back by free, and printing out any unpaired malloc invocations. However, if our app actually does call free on all its memory before terminating, then Valgrind won’t see a leak, even if the actual amount of memory first allocated is totally unbounded!

> When we correctly destroy the librdkafka handle during app shutdown, however, all the memory from this queue gets released: Valgrind never saw a leak.

Есть посты о том, как успешно применили Valgrind, но как по мне эта успешность весьма условная: типа мы видим что что-то не так, но что бы понять нам надо взять что-то ещё. Киньте ссылок в комменты, если есть реально успешные случаи.

Вот обсуждение в issue с пояснениями

> Go doesn't support valgrind, but does support asan, msan, and tsan, which work with clang, and perhaps gcc.
valgrind fails
https://github.com/golang/go/issues/60600

Вот объяснение в proposal'е (на который собственно и ссылается имплементация https://go-review.googlesource.com/c/go/+/674077)

> Go uses mmap (which Valgrind understands) to map a large memory region and then uses our own allocator to handle allocating objects from that region. We allocate both the heap, and individual stacks, from this region. This behavior confuses Valgrind.

add valgrind hints to the runtime under special build mode
https://github.com/golang/go/issues/73602

Да и вообще, казалось бы, зачем все эти приседания, если есть GC?

Если кратко, то для
- Анализа памяти в runtime
- Проверки и обеспечения константного времени выполнения для криптографии

С первым пунктом всё понятно, а для второго немного пояснений.

Если атакующий может каким-либо образом замерять время которое требуется алгоритму для обработки входных данных, то это может дать "зацепку" для подбора ключа. Соответственно, в proposal'е описывается как Valgrind может помочь в этом

> uninitialized memory taint analysis that Valgrind does looks very similar to how we would want to analyze constant-time code. Namely, we care about conditional instructions that operate on sensitive memory, which Valgrind has all the machinery for, just that it cares about uninitialized memory. We can slightly abuse this Valgrind behavior by simply marking sensitive memory as uninitialized, and seeing if Valgrind ever complains about branching behavior that relies on it

Вот пост из 2010 года про подход
Checking that functions are constant time with Valgrind
https://www.imperialviolet.org/2010/04/01/ctgrind.html

Вот большой пост от BearSSL, если кому-то интересно будет углубиться в эту тему
Why Constant-Time Crypto?
https://bearssl.org/constanttime.html

В целом, конечно, штука хорошая и должна помочь сделать софт на Go лучше и стабильней.

Обсуждение на HN
https://news.ycombinator.com/item?id=45344708

ЗЫ Поправьте меня, но я не вижу тестов в патче (см. скрин) 🌝
🔥17👍832👎1



tgoop.com/tech_b0lt_Genona/5725
Create:
Last Update:

Есть такой популярный в узких кругах инструмент Valgrind
https://valgrind.org/docs/manual/QuickStart.html

Создан он для того, чтобы искать утечки памяти, оценивать управление памятью и в целом профилировать её.

О Valgrind я упоминал ранее
https://www.tgoop.com/tech_b0lt_Genona/4832
https://www.tgoop.com/tech_b0lt_Genona/5340

Чаще всего, из того что я видел, Valgrind использовался для программ написанных на C\C++. Это и логично учитывая, сколько проблем там возникает из-за работы с памятью.

И тут ВНЕЗАПНО11!! его поддержку завезли в Go.

Вот обсуждение из 2010 года (самое раннее, которое нашёл), где интересуются, а есть ли что-то похожее для Go
https://groups.google.com/g/golang-nuts/c/Vy5dDw0-fCY

Также я находил посты в которых пытались дебажить и Go-шный софт

Вот, например
Hunting down a C memory leak in a Go program
https://zendesk.engineering/hunting-down-a-c-memory-leak-in-a-go-program-2d08b24b617d

Но там возникали проблемы

> Our app is actually correctly freeing it’s “leaked” memory before it exits. Valgrind produces its leak report at the end of program execution by comparing what it gave out by malloc to what it received back by free, and printing out any unpaired malloc invocations. However, if our app actually does call free on all its memory before terminating, then Valgrind won’t see a leak, even if the actual amount of memory first allocated is totally unbounded!

> When we correctly destroy the librdkafka handle during app shutdown, however, all the memory from this queue gets released: Valgrind never saw a leak.

Есть посты о том, как успешно применили Valgrind, но как по мне эта успешность весьма условная: типа мы видим что что-то не так, но что бы понять нам надо взять что-то ещё. Киньте ссылок в комменты, если есть реально успешные случаи.

Вот обсуждение в issue с пояснениями

> Go doesn't support valgrind, but does support asan, msan, and tsan, which work with clang, and perhaps gcc.
valgrind fails
https://github.com/golang/go/issues/60600

Вот объяснение в proposal'е (на который собственно и ссылается имплементация https://go-review.googlesource.com/c/go/+/674077)

> Go uses mmap (which Valgrind understands) to map a large memory region and then uses our own allocator to handle allocating objects from that region. We allocate both the heap, and individual stacks, from this region. This behavior confuses Valgrind.

add valgrind hints to the runtime under special build mode
https://github.com/golang/go/issues/73602

Да и вообще, казалось бы, зачем все эти приседания, если есть GC?

Если кратко, то для
- Анализа памяти в runtime
- Проверки и обеспечения константного времени выполнения для криптографии

С первым пунктом всё понятно, а для второго немного пояснений.

Если атакующий может каким-либо образом замерять время которое требуется алгоритму для обработки входных данных, то это может дать "зацепку" для подбора ключа. Соответственно, в proposal'е описывается как Valgrind может помочь в этом

> uninitialized memory taint analysis that Valgrind does looks very similar to how we would want to analyze constant-time code. Namely, we care about conditional instructions that operate on sensitive memory, which Valgrind has all the machinery for, just that it cares about uninitialized memory. We can slightly abuse this Valgrind behavior by simply marking sensitive memory as uninitialized, and seeing if Valgrind ever complains about branching behavior that relies on it

Вот пост из 2010 года про подход
Checking that functions are constant time with Valgrind
https://www.imperialviolet.org/2010/04/01/ctgrind.html

Вот большой пост от BearSSL, если кому-то интересно будет углубиться в эту тему
Why Constant-Time Crypto?
https://bearssl.org/constanttime.html

В целом, конечно, штука хорошая и должна помочь сделать софт на Go лучше и стабильней.

Обсуждение на HN
https://news.ycombinator.com/item?id=45344708

ЗЫ Поправьте меня, но я не вижу тестов в патче (см. скрин) 🌝

BY Технологический Болт Генона




Share with your friend now:
tgoop.com/tech_b0lt_Genona/5725

View MORE
Open in Telegram


Telegram News

Date: |

Members can post their voice notes of themselves screaming. Interestingly, the group doesn’t allow to post anything else which might lead to an instant ban. As of now, there are more than 330 members in the group. Earlier, crypto enthusiasts had created a self-described “meme app” dubbed “gm” app wherein users would greet each other with “gm” or “good morning” messages. However, in September 2021, the gm app was down after a hacker reportedly gained access to the user data. “[The defendant] could not shift his criminal liability,” Hui said. While some crypto traders move toward screaming as a coping mechanism, many mental health experts have argued that “scream therapy” is pseudoscience. Scientific research or no, it obviously feels good.
from us


Telegram Технологический Болт Генона
FROM American