Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
6 февраля 2013, 7:43:50 PM   # 1
CJP
 
 
Сообщения: 210
Цитировать по имени
цитировать ответ
по умолчанию Re: Безопасное кодирование лучших практик?

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Я начинаю Bitcoin связанный проект с кодированием, и поскольку она имеет дело с Bitcoin сделками, она может стать интересной мишенью для хакеров. Я хотел бы сделать все возможное, чтобы сделать мой код хакер-доказательство. Я думаю, что в сообществе разработчиков Bitcoin Я не единственный, кто имеет дело с этим, так что я хочу спросить: кто-нибудь есть список правил, чтобы следовать при написании безопасного кода?

Мой текущий проект написан на C ++ (без Boost), но в будущем я тоже заинтересован в Java.

До сих пор, я придумал следующий список:
  • Знать, как код. Не делайте ошибки, проверить все, держать свой код легко понять, и т.д.
  • Знать язык вы используете, и следовать своему передовому опыту, для того, чтобы избежать ошибок и сохранить ваш код читаемым.
  • Не делать никаких предположений относительно входных данных. Выполните полную проверку на входе, особенно вход из ненадежных источников.
  • При использовании библиотек, используйте только те, которым вы доверяете.
  • Были четко определены (и безопасный) поведение для всех ошибочных ситуаций (неверный ввод, из памяти, ошибка библиотеки вызова и т.д.)
  • При использовании криптографии, придерживаться существующей практики, насколько это возможно. Всякий раз, когда вы делаете вещи по-другому, сделать подробный анализ вашего дизайна. Знать свойства криптографических примитивов, которые вы используете. Использование существующих шифрования и хэширования примитивы, если вы не профессор криптография (или эквивалент).

Прямо сейчас, мои самые важные вопросы:
  • Как использовать OpenSSL правильный путь для установления соединения TLS. Это будет новый протоколом, так что нет никакой необходимости для обеспечения обратной совместимости с версиями протокола старой небезопасной SSL / TLS. Это P2P, так что нет четкой иерархии клиента / сервера, но, очевидно, есть один сверстники, который предлагает соединение и другой пэр, который подключается к нему. Я мог бы использовать альтернативные ключевые механизмы аутентификации, кроме СА; Я в основном думал о namecoin для этой цели, но веб-из-траста или определенный пользователем (SSH-стиль) также варианты.
  • Как сделать обработку ошибок. Кажется, прямо сейчас, что каждые три строки кода или так потенциально может создать ошибку, и я хочу удобный способ борьбы с ними. Это хорошая / безопасная идея использовать для этого исключения в C ++? Самый основная обработка ошибок будет регистрировать ошибку и выход: который позволил бы атаки DoS, но по крайней мере, это не самым худшим из возможных последствий нападения. Для ошибок в поступающих данных, я должен был бы написать безвредные обработчик исключений, для предотвращения DoS.
CJP сейчас офлайн Пожаловаться на CJP   Ответить с цитированием Мультицитирование сообщения от CJP Быстрый ответ на сообщение CJP


Как заработать Биткоины?
Без вложений. Не майнинг.


6 февраля 2013, 7:45:51 PM   # 2
 
 
Сообщения: 924
Цитировать по имени
цитировать ответ
по умолчанию Re: Безопасное кодирование лучших практик?

Получил 1806 Биткоинов
Реальная история.





http://www.atsec.com/downloads/pdf/secure-coding-guidelines.pdf
misterbigg сейчас офлайн Пожаловаться на misterbigg   Ответить с цитированием Мультицитирование сообщения от misterbigg Быстрый ответ на сообщение misterbigg

7 февраля 2013, 4:48:21 AM   # 3
 
 
Сообщения: 588
Цитировать по имени
цитировать ответ
по умолчанию Re: Безопасное кодирование лучших практик?

Проверьте OWASP https://www.owasp.org это даст вам веб-приложения безопасные кодирования лучших практик и библиотеки, которые вы можете использовать.

Роберт C Seacord имел библию C Secure кодирования, которая до сих пор относится к C ++.
ЕКМ сейчас офлайн Пожаловаться на ЕКМ   Ответить с цитированием Мультицитирование сообщения от ЕОГО Быстрый ответ на сообщение ЕКМ

9 февраля 2013, 10:33:43 AM   # 4
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: Безопасное кодирование лучших практик?

Мой список:

Предпочитают управляемые языки. Несмотря на то, что они могут быть сдерживающие, языки, как Java или C # значительно труднее стрелять себе в ногу с. Я не имею ничего против C ++, нравится работать с ним (это мой основной язык на работе), и это можно написать C ++ надежно - видеть, как Satoshi сделал это для примера. Но это не так просто, поэтому Каминский был настолько удивлен, когда он увидел, что это было сделано.

Не пытайтесь переописать Bitcoin. Шутки в сторону. Это тяжело, я должен знать, либо найти способ использовать Satoshis код, или рассмотреть вопрос о принятии шанс с bitcoinj. Bitcoinj может использоваться с C ++, кстати, проверить родное отделение в мерзавца репо, чтобы увидеть, как это делается с помощью GCJ / CNI.

Сведите к минимуму площадь поверхности для атаки - запустить производство код на компьютере, на котором ничего не делать. Используйте ключ на основе SSH аутентификации только, без каких-либо паролей. Не размещать его с дешевыми поставщиками VPS, которые могут стать средством для атаки, либо предпочитает физическую форму в соседнем центре обработок данных вы можете управлять, или использовать провайдеры VPS, но скрыть ядро ​​вашего приложения за скрытый сервисом Tor, так что никто, кроме вы знаете, где его найти.

Рассмотрим Песочница различные части приложения и использовать RPC между ними. Я написал свою дипломную работу на эту тему. Такие инструменты, как SELinux или AppArmor могут быть использованы для ограничения хакеров, если они все-таки удается ворваться через уязвимый компонент. Так узнать о них и посмотреть, как их использовать. Управляемые платформы имеют еще одно преимущество здесь, потому что они, как правило, имеют удобные (но конкретный язык) механизмы RPC, построенные в так связи между компонентами песочницы легко. Но если все ваше приложение написано на одном языке, это не имеет значения. Для C ++ можно использовать ZeroC ICE или просто использовать собственный протокол.

Используйте утверждения либерально. Лучше разбить приложение и иметь некоторое время простоя, чем позволить ей войти неопределенное состояние, которое может быть использовано. Тем не менее, очевидно, утверждения могут быть использованы только для внутреннего состояния, которое никогда не должно быть испорчено, это не подходит для переходных условий, как плохой вход из сети. Еще раз, удалось выиграть языки. Исключения в C ++ очень трудно сделать правильно, потому что это гораздо труднее писать безопасный код исключения при выполнении ручного управления памятью. Исключение-безопасность редко рассматривается, в моем опыте, но это очень важно. В языке, как C ++, это может привести к повреждению памяти, если вы сделаете это неправильно, и это часто начало подвига. С сборкой мусора это намного проще.

TLS является хорошим выбором для защищенной связи, но, как вы, очевидно, уже знаете, это не то, что полезно в P2P сценарий, потому что вы (почти по определению) не знаете, кто вы говорите. Убедитесь, что вы действительно понимаете, почему вы хотите использовать шифрование там, то, что готов общаться ни с чем не приносит пользы много от шифрования, что связь.
Майк Хирн сейчас офлайн Пожаловаться на Mike Хирн   Ответить с цитированием Мультицитирование сообщения от Mike Хирн Быстрый ответ на сообщение Mike Хирн

11 февраля 2013, 7:05:02 PM   # 5
CJP
 
 
Сообщения: 210
Цитировать по имени
цитировать ответ
по умолчанию Re: Безопасное кодирование лучших практик?

Спасибо за все отклики. Я определенно буду использовать ATSEC и OWASP связывает пару раз во время разработки и тестирования.

Я думаю, что список Mike Хирн полезен. При его применении в моем проекте у меня есть следующие ответы:
  • Я начал использовать C ++. Я чувствую себя уверенно, используя C ++, и я знаю, что могу сделать надежный C ++ код; единственное новая для этого проекта является большим акцентом на безопасности. У меня сложилось впечатление, что это легче сделать кросс-платформенный портативный C ++ код, который не требует такие вещи, как время выполнения Java или интерпретатора. Многие "удалось" Языки приходят с огромными стандартными библиотеками со своими уязвимостями. Я полагаю, только части, я на самом деле с помощью действительно вопрос, но я не совсем уверен. О сборке мусора: это что не делает состояние вашего программного обеспечения непредсказуем? Может быть, вывоз мусора в порядке до тех пор, пока ваши деструкторы не делать слишком важные вещи?
  • Я не буду повторно реализовать Bitcoin; Я планирую использовать его через интерфейс RPC.
  • Я еще даже не близко к стадии развертывания, но благодаря уже для сисадмина советов о хостинге и т.д .. Во время разработки приложений, я намерен сохранить применение обедненным и среднеквадратичный; если он получает громоздким я буду рассматривать разделив его таким образом, что различные части могут работать в изоляции и с минимальными привилегиями.
  • Сейчас у меня есть привычка тщательно документировать каждый метод и функции, где я перечисляю, например, все требования входных объектов и вещи, он обещает о выходе объектах; Я также упомянуть, проверяются ли некоторые требования или не проверяются. Очевидно, что проверяется, является предпочтительным.
  • Прямо сейчас, мое поведение по умолчанию в случае ошибок "войти сообщение об ошибке и завершить приложение", Очевидно, что при проверке ненадежного ввода, поведение по умолчанию должно быть разным (например, "ответ с сообщением об ошибке, закрыть соединение и очистить") Для предотвращения DoS-атак.
  • Я решил использовать исключение в C ++ для обработки ошибок: у меня есть впечатление, что чище, меньше кода стоит усилий сделать все исключения безопасными. У меня сложилось впечатление, что вещи, которые вы должны сделать для безопасности исключений уже являются хорошей практикой в ​​любом случае. Недостатком является то, конечно, что новые разработчики также должны иметь "C ++ навыки исключения"; сейчас я принимать решения, основанные на моем собственном уровне мастерства.
  • Мое приложение только P2P в том смысле, что все участники имеют ту же роль, и образуют произвольную форму сети. Разница с большинством P2P сетей является то, что в моем случае, участники тщательно выбирать, кто они говорят. Рассмотрим это будет своего рода темно-сети, если вы хотите. В моем случае, TLS используется только для защиты конфиденциальности; Целостность обеспечиваются с другими криптографическими мерами.
CJP сейчас офлайн Пожаловаться на CJP   Ответить с цитированием Мультицитирование сообщения от CJP Быстрый ответ на сообщение CJP



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW