//tips
Ethernautが難しすぎてビビってる。
表明保証条項は売主が正確に真実を表明し保証するもの。これがあることで買い手側は損害賠償請求や契約解除ができる。大型案件などに重宝しそう。
Dockerを導入できるようにしたい
//smart contract
Smart contractのセキュリティについてさらに確認項目を増やす。以前に利用したのはSlitherでこちらは問題なかった。
Publicたインクリメント以外にも気を付ける部分を探していく。
natspecを使い、きちんとコメントを書くこと。
https://qiita.com/ryu-yama/items/07a348149bcd191c74f0
また、gitignoreでgit環境からきちんと外すようにすること。
https://qiita.com/Kashiwara/items/e920144fccb8ae5d9069
下記のgithubの解説部分からヒント見つけていく。
https://github.com/PatrickAlphaC/hardhat-security-fcc
https://github.com/trailofbits/eth-security-toolbox
Sllitherの次にechidnaなどを試した方が良いとのこと。
Truffleでも使用例が見つかった。
https://github.com/crytic/echidna/wiki/Testing-Truffle-projects-with-Echidna
Echidnaが行ってくれるのはファジングテストで、これは、無効、不正、または予期しない入力をシステムに挿入してソフトウェアの欠陥や脆弱性を明らかにする自動化されたソフトウェアテストとのこと。
つまり、システムに予期しない入力を与え、セキュリティ、パフォーマンス、入力がシステムに悪影響を与えるかどうかを監視するもの。
Echidnaをあとで試す。
Echidna導入の際にはdocker docからtoolboxをインストールして使用する方法もあるようなのでdockerについても調べておく。
https://docs.docker.com/
https://knowledge.sakura.ad.jp/13265/
dockerはコード化されたファイルを共有することで、どこでも誰でも同じ環境が作れるものとのこと。
作成した環境を配布できるというのはかなり大事で、バージョン違いにより発生するバグやos違いによるエラーを少なくできる。以前truffleでバージョン違いのえげつなさを知ったのでこの恩恵は大きいだろうと考える。スーパーgithubのようなものか。スクラップ&ビルドが容易にできるよう。開発工程の中で使っていた環境をそのまま本番環境に持っていくことも可能。
使い方を習得しておいて損はなさそう。
最大の攻撃は
・再入可能性
リエントランシーの対策方法は、状態変数を変更したあとで、トランザクションを実行することを徹底すること。残高を変更する前に送金を行うとループにより全額を盗まれる。トランザクションの実行条件となっている変数は、トランザクションを実行する前に必ず変更する。
https://yuyasugano.medium.com/%E3%83%AA%E3%82%A8%E3%83%B3%E3%83%88%E3%83%A9%E3%83%B3%E3%83%88-%E5%86%8D%E5%85%A5%E5%8F%AF%E8%83%BD-%E5%86%8D%E8%80%83-a194c80f131f
・oracle操作
の二つであり、deploy前にはslitherの実行と外部からのoracle操作や再入可能性の模擬テストをマニュアルで行う。Echidnaの実行もその一つ。
Ethernaut(情報セキュリティのスキルを競い合うセキュリティコンテストのようなもの)でセキュリティに関する知識テストを行うことができる。Solidity v0.8以降はSafeMathは必要ないとのこと。また、Solidity v0.5.0以降、address型とaddress payable型は区別されるなど学べることが多い。
private変数は、他のコントラクトから値を見ることができるので、パスワードを利用する場合は、パスワードをハッシュ化した値を保存し、認証時はその値と"引数で受け取った値のハッシュ値"を比較することになる。
https://qiita.com/derodero24/items/5405a2030802f21e573f
https://qiita.com/sinsinpurin/items/9c3afa07c0d2bbb4089a
https://keichi.dev/post/ethernaut/