Iman Profile picture
29 Jul, 12 tweets, 4 min read
۱- شاید تا به حال این سوال از خودتون کردین که چجوری هکرها میتونند بعضی اوقات چند ده میلیون دلار از قراردادهای هوشمند بدزدند!؟ در این #کریپتومان به توضیح یکی از معروف ترین حمله های (هک DAO) صورت گرفته در تاریخ کریپتو که توسط حمله #ورود_مجدد (Re-Entrancy Attack) انجام شد میپردازیم. Image
۲- پروژه DAO تونسته بود میزان زیادی اتر (ether) رو‌ (۱۲.۷ میلیون عدد) از سرمایه‌گذارها تو سال ۲۰۱۶ جذب کنه، این پروژه قرار بود یک Venture Capital (سرمایه گذار ماجراجو) غیرمتمرکز برای دنیای کریپتو باشه. ولی تو ۱۷ جون ۲۰۱۶، مورد حمله قرار گرفت و تو ساعات اولیه ۳.۶ میلیون اتر رو از
۳- دست داد. چون هکر‌ پول رو پس نداد، باعث شد سازندهای اتریوم یک hard fork بزنن، که ازش اتریوم (چیزی که ما الان به اسم اتریوم میشناسیم و هک توش به زور برگردونه شده) و اتریوم کلسیک دراومد. این کار خودش پایه‌های بلاکچین زیر سوال برد (اصل immutability یا تغییر ناپذیری، به معنی اینکه
۴- کسی نمیتونه یک تراکنش برگردونه). هر موقعی که یک حمله تو بلاکچین رخ میده، در اثر وجود یک نقطه‌ضعف یا vulnerability هست و هکر از این نقطه ضعف سو‌استفاده میکنه (exploit) و حمله رو انجام میده. اسم سبک حمله‌ای که روی DAO انجام شد، حمله ورود مجدد یا Re-Entrancy Attack هست، برای
۵- توضیح این حمله اول باید مفهوم ورود مجدد رو تعریف کنم. فرض کنید شما دارین یه ایمیل واسه دوستتون مینویسین، وسط نوشتن ایمیل یادتون میاد قبلش باید یه ایمیل دیگه به یه دوست دیگتون بزنین، شروع میکنید اون ایمیل مینویسین و میفرستیمت و دوباره بر میگردین که ایمیل اول رو کامل کنید و
۶- بفرستین. در اینجا شما یه ورود مجدد داشتین به ایمیل اولتون. حالا برای توضیح این حمله فرض کنید یک دستگاه عابر بانک داریم که برای اینکه پول به شما بده اول میزان موجودی شما رو حساب میکنه و اگر آبه اندازه کافی پول داشتین اول پول رو به شما میده و بعد موجودی شما رو تصحیح میکنه
۷- مثلا شما ده میلیون تو حسابتون هست و بعد یک میلیون میخواین، یک میلیون میده بهتون بعد میزان موجودی حساب شما رو عوض میکنه به ۹ میلیون! این کار اشتباه است! چرا؟ چون بعد از فرستادن پول نباید چیزی تغییر کنه و هر تغییری تو مجودی باید قبل از فرستادن انجام بشه! برای چی؟ فرض کنید دستگاه
۸- پول رو بده بعد برق بره یا ماشین کرش کنه، اینجوری طرف پول گرفته ولی موجودی حسابش به روز نشده! اتفاق مشابه همین در هک DAO رخ داده. هکر یک قرارداد هوشمند میانی (proxy) نوشت و از اون استفاده کرد که تابعی که مخصوص دریافت پول (اتر)هست رو صدا کنه، مشکل اینجاست که نویسنده کد DAO قبل
۹- از ارسال پول مقدار رو از موجودی کم نکرده! از اون ور هر موقع شما پولی رو به یه قرارد هوشمند بفرستین (در اینجا DAO پول به قرارداد هوشمند میانی میفرسته) یک تابع به اسم fallback اجرا میشه، شما میتونین کدی رو‌ تو fallback بزارین واسه اجرا یا اینکه خالی بزاریدش. در موقع ارسال پول به
۱۰- قرارداد هوشمند میانی، هکر توی fallback یه کد نوشت که دوباره از DAO درخواست پول کنه، و از اونجا که درخواست با وجود فرستادن پول، از موجودی حساب چیزی کم نشده، به صورت یک حلقه (فراخوانی بازگشتی) تونست حساب DAO رو خالی کنه! من اینجا خیلی ساده صحبت کردم، نکاتی هست که به اون Image
۱۱- ها اشاره نکردم. ولی سعی کردم کلیت قضیه رو برسونم. برای فرستادن اتر از سه تابع send(), transfer() و call.value() میشه استفاده کرد. یکی از دلایل موفقیت حمله این بود که DAO از call.value استفاده کرده بود، به خاطر همین عملا محدودیتی بر روی gas fee نداشت (برنامه نویس باید دستی Image
۱۲- محدود میکرد این میزان). جدا از این هیچوقت نباید بعد از ارسال اتر state رو عوض کنیم (مثل میزان موجودی). همچنین اکثر حمله‌ها توسط قراردادهای میانی انجام می‌شود که با تشخیص آدم نبودن (بعدا میگم چجوری باید این کار کرد) فراخواننده توابع میشه جلوی حمله رو گرفت. موفق باشین.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Iman

Iman Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @ImanOracle

22 Aug
همینجا از تمام دختران کریپتوی ایران ممنونم که توی فضای توییتر فعال هستند. یک جامعه پیشرفته رو از طریق رفتارش با زن‌ها میشه بررسی کرد. از تمام بزرگان توییتر فارسی میخوام که حامی #دختران_کریپتو باشن.
@mamadporii @sohaylmoradi @Persian_TA @NaserESP @CryptoVizArt @learnonchain...
@Naeempix @ArashMalekisani @defimancer @Script_cast @seniorcrypto @NonStopCrypto @cryptosamz و خیلی دیگه از بزرگان توییتر کریپتو که تعدادشون کم نیست و من عذر خواهی میکنم اگر منشن نکردمشون.
Read 4 tweets
19 Jul
۱- شاید تا به حال اسم قرارداد هوشمند (smart contract) رو شنیدین ولی نمیدونین چرا یک تکنولوژی انقلابی هست، یا این که اسم اوراکل (Oracle) رو شنیدین ولی نمیدونین که بدون اوراکل‌ها، DeFi نمیتونست وجود داشته باشه. در این #کریپتومان به توضیح این موارد میپردازم.
۲- قراردادهای هوشمند در اصل نه قرارداد هستند و‌ نه هوشمند. یک مشت کد هستن (که اکثرا به زبان Solidity نوشته می‌شوند) و به صورت غیر متمرکز بر روی شبکه های مثل اتریوم، BSC, ... اجرا می‌شوند و مسئول انتقال و مدیریت ارزش مالی رو به عهده می‌گیرند. شاید از خودتون سوال کنید که چرا انقدر
۳- یه همچین چیزی میتونه مهم باشه!؟ یکی از مهم‌ترین دلایلش اینه که کسی نمیتونه سانسورشون کنه (censorship resistant)، یعنی چی؟ فرض کنید یه نفر الان تو کانادا یه سایت قمار بیاره بالا (این کار غیرقانونی هست بدون مجوز، و مجوز هم دست خود دولته) بلافاصله مسئولین سایت شناسایی می‌شوند
Read 11 tweets
18 Jun
۱- در این رشتو به نحوه پیدا کردن کوین‌هایی با مارکت‌کپ کوچک که قابلیت رشد انفجاری دارند با بررسی رفتار بزرگان در توییتر، به همراه دو نمونه تشخیص موفق میپردازیم (این یک توصیه مالی نیست). در ابتدا این رو بگم که مارکت کریپتو توسط یکسری آدم تاثیر گذار اداره میشه و ما فقط سوار موجی که Image
۲- اون‌ها درست میکنند میشیم. برای مثال اول به CZ که صاحب صرافی بایننس هست میپردازیم. حتما دیدین که وقتی یک توکن می‌خواد در بایننس لیست بشه یا میشه، قیمت رشد عجیبی پیدا میکنه. مشخصا اولین کسانی که متوجه میشن این توکن می‌خواد لیست شه خود CZ هست، و طبعا میتونه ثروت هنگفتی از این راه
۳- به جیب بزنه. سوال اینه که آیا میشه قبل لیست شدن یه توکن بدون داشتن جاسوس متوجه شد؟ جواب این هست که شاید! چطوری؟ با تحلیل رفتار CZ, ایشون ۲.۸ میلیون فالور داره و فقط ۱۵۰۰ اکانت رو فالو میکنه. ایشون علاقه خاصی به پروژهای شبکه
Read 6 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!

:(