در این مطلب، ویدئو Python Fuzzing with Atheris – مقدمه با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:18:15
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,280 –> 00:00:06,240
به گوشه تجزیه و تحلیل برنامه خوش آمدید
2
00:00:07,520 –> 00:00:09,840
در این ویدیو ما قصد داریم
3
00:00:09,840 –> 00:00:10,559
نگاهی سریع به
4
00:00:10,559 –> 00:00:12,799
یک حفره جدید به نام atheris داشته باشیم که یک
5
00:00:12,799 –> 00:00:14,639
حفره پایتون هدایت شده با پوشش است
6
00:00:14,639 –> 00:00:16,960
که بر اساس موتور هسته lip fuzzer
7
00:00:16,960 –> 00:00:17,760
ساخته شده است.
8
00:00:17,760 –> 00:00:19,439
این یک پروژه بسیار جدید است و می توانیم
9
00:00:19,439 –> 00:00:22,000
ببینیم که تا به حال فقط دو commit داشته است
10
00:00:22,000 –> 00:00:24,240
و فقط آنها دو
11
00:00:24,240 –> 00:00:25,039
روز پیش انجام شده اند،
12
00:00:25,039 –> 00:00:26,960
طبیعتاً می توانید فکر کنید که
13
00:00:26,960 –> 00:00:28,400
احتمالاً
14
00:00:28,400 –> 00:00:29,119
برای
15
00:00:29,119 –> 00:00:31,840
مدتی بیش از مدتی
16
00:00:31,840 –> 00:00:33,360
قبل از
17
00:00:33,360 –> 00:00:36,480
انتشار commit در گوگل توسعه داده شده است.
18
00:00:36,480 –> 00:00:38,719
در این ویدیو انجام دهید این است
19
00:00:38,719 –> 00:00:41,040
که ما atheros را نصب
20
00:00:41,040 –> 00:00:43,680
خواهیم کرد، سعی می کنیم آن را روی چند نمونه اجرا کنیم
21
00:00:43,680 –> 00:00:45,280
و سپس شاید کمی
22
00:00:45,280 –> 00:00:45,680
23
00:00:45,680 –> 00:00:48,559
به ظاهر کدهای اینجا نگاه کنیم
24
00:00:48,559 –> 00:00:50,559
زیرا تعداد زیادی کد
25
00:00:50,559 –> 00:00:53,760
در حفره وجود ندارد اما وجود دارد. هنوز چند
26
00:00:53,760 –> 00:00:56,879
بیت کد c پلاس در اینجا وجود دارد،
27
00:00:56,879 –> 00:00:59,680
بنابراین برای نصب aetherius میتوانیم آن را
28
00:00:59,680 –> 00:01:01,760
به سادگی از طریق پیپ نصب کنیم،
29
00:01:01,760 –> 00:01:03,840
اما ابتدا باید مطمئن شویم که
30
00:01:03,840 –> 00:01:05,360
31
00:01:05,360 –> 00:01:08,479
32
00:01:08,479 –> 00:01:11,360
محیط پایتون
33
00:01:11,360 –> 00:01:12,880
لازم را نصب کردهایم و مخصوصاً باید این p را داشته باشیم. بسته ython
34
00:01:12,880 –> 00:01:14,560
3-dev
35
00:01:14,560 –> 00:01:16,640
بنابراین ما فقط آن را نصب می کنیم
36
00:01:16,640 –> 00:01:18,560
و اینجا در سمت راست
37
00:01:18,560 –> 00:01:22,159
من در یک تصویر docker هستیم فقط
38
00:01:22,159 –> 00:01:24,240
یک تصویر docker نسبتاً تمیز با نسخه
39
00:01:24,240 –> 00:01:26,960
10 نصب شده
40
00:01:26,960 –> 00:01:29,360
خوب است، بنابراین اکنون بیایید سعی کنیم
41
00:01:29,360 –> 00:01:31,840
atheris را نصب کنیم
42
00:01:35,680 –> 00:01:37,520
و ما. جمعآوری مجدد آن
43
00:01:37,520 –> 00:01:41,840
باید نسبتاً نرم پیش برود،
44
00:01:43,680 –> 00:01:45,680
بنابراین روند اکنون به پایان رسیده است و
45
00:01:45,680 –> 00:01:47,360
ما
46
00:01:47,360 –> 00:01:51,360
atheris fossa را نصب کردهایم، بنابراین اکنون بیایید
47
00:01:51,360 –> 00:01:53,520
سعی کنیم یکی از نمونههایی
48
00:01:53,520 –> 00:01:55,200
را که در اینجا
49
00:01:55,200 –> 00:01:57,680
مستقیماً در readme
50
00:01:57,680 –> 00:01:59,360
دارند مرور کنیم.
51
00:01:59,360 –> 00:02:00,240
یک
52
00:02:00,240 –> 00:02:03,360
نمونه بسیار ساده از نحوه استفاده از fossa، بنابراین اجازه
53
00:02:03,360 –> 00:02:04,479
دهید فقط یک فایل test.pi ایجاد کنیم و
54
00:02:04,479 –> 00:02:09,840
به آن برویم
55
00:02:10,878 –> 00:02:13,120
و آنچه در این مثال میبینیم این است
56
00:02:13,120 –> 00:02:16,400
که ما به سادگی ماژول atheros را وارد
57
00:02:16,400 –> 00:02:18,560
میکنیم و سپس دو خط در اینجا داریم که
58
00:02:18,560 –> 00:02:20,480
اساساً فیوزینگ را تنظیم میکند.
59
00:02:20,480 –> 00:02:22,720
بنابراین ما در اینجا یک فراخوانی برای راه اندازی بر روی
60
00:02:22,720 –> 00:02:23,840
ماژول
61
00:02:23,840 –> 00:02:25,840
atheros داریم که در آن ابتدا یک آرگومان به
62
00:02:25,840 –> 00:02:28,160
نام sysarcv می دهیم و سپس
63
00:02:28,160 –> 00:02:31,280
یک فراخوانی در اینجا برای آزمایش یک ورودی داریم و
64
00:02:31,280 –> 00:02:33,120
متأسفیم که یک تماس نیست، اما آرگومان دوم
65
00:02:33,120 –> 00:02:35,360
برای تابع setup در اینجا است. اوه،
66
00:02:35,360 –> 00:02:36,720
تابعی که در اینجا داریم، یک ورودی را آزمایش میکند،
67
00:02:36,720 –> 00:02:38,720
بنابراین احتمالاً به این معنی است که وقتی
68
00:02:38,720 –> 00:02:39,360
69
00:02:39,360 –> 00:02:41,920
این را تنظیم میکنیم، آرگومان دوم
70
00:02:41,920 –> 00:02:43,760
در اینجا
71
00:02:43,760 –> 00:02:46,879
تابع پایتون ورودی حفره ما
72
00:02:46,879 –> 00:02:50,160
خواهد بود، بنابراین این دادههای تصادفی است که
73
00:02:50,160 –> 00:02:52,800
بسیار شبیه عبور از فیوزینگ است. موتور به
74
00:02:52,800 –> 00:02:53,760
75
00:02:53,760 –> 00:02:56,080
اولین درایور ما و سپس ما به سادگی یک
76
00:02:56,080 –> 00:02:57,040
تماس در اینجا برای
77
00:02:57,040 –> 00:03:00,159
fuss داریم که
78
00:03:00,159 –> 00:03:03,519
باعث می شود موتور فیوزینگ اجرا شود،
79
00:03:03,519 –> 00:03:05,599
بنابراین مطمئن هستم که این کامپایل نمی شود
80
00:03:05,599 –> 00:03:07,040
زیرا ما واقعاً به این ماژول نیاز داریم،
81
00:03:07,040 –> 00:03:08,800
اما اجازه دهید ببینیم
82
00:03:08,800 –> 00:03:11,760
که آیا بله کار می کند،
83
00:03:12,400 –> 00:03:18,480
بنابراین ما فقط باید cis را در اینجا داشته باشیم
84
00:03:18,480 –> 00:03:22,080
و بیایید آن را اجرا کنیم
85
00:03:22,080 –> 00:03:25,120
و می بینیم که نسبتاً سریع اجرا می شود،
86
00:03:25,120 –> 00:03:28,159
اما می بینیم که یک استثنا در تماس پایتون داریم
87
00:03:28,159 –> 00:03:28,879
88
00:03:28,879 –> 00:03:32,319
و این یک خطای زمان اجرا است و
89
00:03:32,319 –> 00:03:35,040
این رشته را در اینجا به ما می دهد. بد است و میتوانیم
90
00:03:35,040 –> 00:03:36,879
ببینیم که دقیقاً
91
00:03:36,879 –> 00:03:39,360
همان خطایی است که در اینجا پرتاب میشود،
92
00:03:39,360 –> 00:03:41,200
همچنین میتوانیم ببینیم که یک فایل خراب در اینجا دریافت میکنیم،
93
00:03:41,200 –> 00:03:42,239
94
00:03:42,239 –> 00:03:44,239
بنابراین بیایید ببینیم در آن فایل چه چیزی
95
00:03:44,239 –> 00:03:46,080
وجود دارد و به احتمال زیاد دوست داریم ببینیم که حداقل
96
00:03:46,080 –> 00:03:47,840
97
00:03:47,840 –> 00:03:50,879
سه مورد وجود دارد. سه شخصیت
98
00:03:50,879 –> 00:03:53,440
ba d
99
00:03:57,599 –> 00:03:59,040
و میتوانیم ببینیم که واقعاً
100
00:03:59,040 –> 00:04:00,799
همینطور است، بنابراین ما در اینجا یک
101
00:04:00,799 –> 00:04:03,760
فایل صندلی تمیز با سه بایت داریم که
102
00:04:03,760 –> 00:04:04,640
با بد مطابقت دارد،
103
00:04:04,640 –> 00:04:07,920
بنابراین
104
00:04:07,920 –> 00:04:11,439
این سادهترین مثال از
105
00:04:11,439 –> 00:04:14,480
اجرای آتروس است،
106
00:04:14,480 –> 00:04:17,600
بنابراین اکنون بیایید سعی کنیم مثال را کمی تغییر دهیم
107
00:04:17,600 –> 00:04:21,040
و ببینیم چگونه است. مانند
108
00:04:21,040 –> 00:04:22,880
اینکه کمی احساس بهتری نسبت به
109
00:04:22,880 –> 00:04:25,360
نحوه عملکرد حفره و
110
00:04:25,360 –> 00:04:27,360
توانایی انجام
111
00:04:27,360 –> 00:04:29,600
آن داشته باشید، اجازه دهید کمی بررسی و
112
00:04:29,600 –> 00:04:31,280
بررسی بیشتر در داخل این تست یک تابع ورودی اضافه
113
00:04:31,280 –> 00:04:32,560
114
00:04:32,560 –> 00:04:35,440
کنیم تا ببینیم اگر میتوانید
115
00:04:35,440 –> 00:04:36,720
از ما عبور کنید. بررسی کنید
116
00:04:36,720 –> 00:04:39,840
و اجازه دهید فقط چند بررسی
117
00:04:39,840 –> 00:04:42,880
ساده روی داده ها اضافه کنیم به
118
00:04:42,880 –> 00:04:44,720
طوری که
119
00:04:44,720 –> 00:04:46,479
دستیابی به آن برای اولین نفر کمی دشوارتر شود یا
120
00:04:46,479 –> 00:04:46,960
حداقل
121
00:04:46,960 –> 00:04:48,240
دشوار شود به این معنا که باید
122
00:04:48,240 –> 00:04:51,919
محدودیت های بیشتری را پشت سر بگذارد
123
00:04:52,000 –> 00:04:56,080
و اگر به سادگی از آن بازگردید.
124
00:04:56,080 –> 00:04:58,320
تابع ورودی test1 به
125
00:04:58,320 –> 00:05:01,360
این معنی است که در اولین تکرار مشابه هیچ باگی وجود ندارد،
126
00:05:01,360 –> 00:05:05,039
بنابراین به سادگی
127
00:05:05,039 –> 00:05:07,840
داشتن یک بازگشت خوب از این ورودی s1
128
00:05:07,840 –> 00:05:09,039
فقط
129
00:05:09,039 –> 00:05:12,560
بدون پرتاب یک استثنا برمی گردد،
130
00:05:12,560 –> 00:05:16,560
بنابراین اجازه دهید به صورت زیر عمل کنیم.
131
00:05:16,560 –> 00:05:19,759
برای اینکه ببینیم آیا میتوانیم کمی مانند یک کلمه بوم طولانی املا کنیم،
132
00:05:19,759 –> 00:05:23,120
133
00:05:23,120 –> 00:05:25,360
بنابراین اگر اینطور نیست اگر کاراکتر اول
134
00:05:25,360 –> 00:05:27,120
با یک b بزرگ برابر نیست، به
135
00:05:27,120 –> 00:05:32,160
سادگی
136
00:05:32,160 –> 00:05:34,160
برمیگردیم و این کار را برای تعدادی از کاراکترها انجام میدهیم،
137
00:05:34,160 –> 00:05:36,000
138
00:05:36,000 –> 00:05:38,639
بنابراین بیایید بگوییم اگر کاراکتر دوم کاراکتر
139
00:05:38,639 –> 00:05:41,280
در بافر داده برابر با n
140
00:05:41,280 –> 00:05:46,880
حروف بزرگ o و سوم و غیره
141
00:05:49,520 –> 00:05:51,840
به شرح زیر نیست، بیایید ببینیم که آیا میتوانیم
142
00:05:51,840 –> 00:05:54,080
کمی بیشتر
143
00:05:54,080 –> 00:05:57,600
از قبل کاراکتر دریافت کنیم، سپس استثنا را پرتاب میکنیم،
144
00:05:57,600 –> 00:05:59,680
بنابراین در این مورد
145
00:05:59,680 –> 00:06:01,360
ما محدودیتهایی را که
146
00:06:01,360 –> 00:06:04,639
اولین موردی که باید پیدا کنیم این است که
147
00:06:04,639 –> 00:06:06,319
طول داده ها باید هشت باشد
148
00:06:06,319 –> 00:06:07,759
زیرا اگر هشت نباشد، به آرامی برمی گردیم
149
00:06:07,759 –> 00:06:09,759
و سپس
150
00:06:09,759 –> 00:06:11,520
پنج کاراکتر اول
151
00:06:11,520 –> 00:06:13,600
um از بافر را نیز بررسی می کنیم اگر در مجموع با uh boom برابری نکنند.
152
00:06:13,600 –> 00:06:15,360
153
00:06:15,360 –> 00:06:18,400
توضیح داده شده است، تنها
154
00:06:18,400 –> 00:06:19,120
در این صورت
155
00:06:19,120 –> 00:06:21,600
است که خطای زمان اجرا خود را پرتاب می کنیم و
156
00:06:21,600 –> 00:06:22,720
این بدان معناست که
157
00:06:22,720 –> 00:06:24,560
در مقایسه با قبل باید بررسی های بیشتری
158
00:06:24,560 –> 00:06:25,199
انجام شود،
159
00:06:25,199 –> 00:06:28,319
بنابراین اجازه دهید ببینیم که اولین uh چگونه
160
00:06:28,319 –> 00:06:31,440
با این عملکرد جدید مانند
161
00:06:31,440 –> 00:06:35,840
فوسا نقطه ورودی انجام می شود.
162
00:06:36,560 –> 00:06:39,440
و من t اجرا میشود و میتوانیم ببینیم که
163
00:06:39,440 –> 00:06:39,840
164
00:06:39,840 –> 00:06:42,800
مانند llvm معمولی چنین است و بنابراین
165
00:06:42,800 –> 00:06:44,160
خروجی آن بسیار سریعتر است، جایی که میتوانیم
166
00:06:44,160 –> 00:06:44,880
پوشش
167
00:06:44,880 –> 00:06:47,919
را ببینیم و خیلی سریع به
168
00:06:47,919 –> 00:06:50,080
استثنای پایتون در اینجا میرسیم، بنابراین استثناء بدی خود را میبینیم
169
00:06:50,080 –> 00:06:51,280
170
00:06:51,280 –> 00:06:54,639
و همچنین میتوانیم اینجا ببینیم که
171
00:06:54,639 –> 00:06:57,120
کاراکترهای بوم برای ما نوشته شده اند،
172
00:06:57,120 –> 00:06:59,520
بنابراین ما می توانیم
173
00:06:59,520 –> 00:07:02,560
نگاهی سریع به بافر خاص
174
00:07:02,560 –> 00:07:02,960
نیز داشته
175
00:07:02,960 –> 00:07:05,039
باشیم و می توانیم ببینیم که طول بیت در
176
00:07:05,039 –> 00:07:06,720
واقع هشت بایت و
177
00:07:06,720 –> 00:07:10,960
دو بایت خوب است، بنابراین خیلی خوب کار می
178
00:07:10,960 –> 00:07:14,639
کرد و مثال ساده
179
00:07:14,639 –> 00:07:18,000
نسبتاً ساده بود حالا
180
00:07:18,000 –> 00:07:20,479
اجازه دهید سعی کنید و ابتدا یکی از مثالهایی
181
00:07:20,479 –> 00:07:21,759
را که آنها ارائه کردهاند انجام دهید
182
00:07:21,759 –> 00:07:23,440
، بنابراین اینها باید کمی
183
00:07:23,440 –> 00:07:23,919
184
00:07:23,919 –> 00:07:26,400
گستردهتر از نمونههای دیگر باشند
185
00:07:26,400 –> 00:07:27,759
186
00:07:27,759 –> 00:07:29,759
و به طور خاص بیایید این یامال فوسا را امتحان کنیم تا
187
00:07:29,759 –> 00:07:32,000
ن
188
00:07:32,000 –> 00:07:34,000
ا یک پدر یامال در اینجا داشته باشند و ما
189
00:07:34,000 –> 00:07:35,120
190
00:07:35,120 –> 00:07:37,360
همان یک را در چاه داریم، ابتدا باید
191
00:07:37,360 –> 00:07:38,960
مخزن
192
00:07:38,960 –> 00:07:45,840
را کلون کنیم، پس بیایید آن را کلون کنیم
193
00:07:46,400 –> 00:07:48,639
و با آن پیش برویم و سپس بیایید
194
00:07:48,639 –> 00:07:50,240
195
00:07:50,240 –> 00:07:52,800
به مخزن و نمونه ها برویم و به
196
00:07:52,800 –> 00:07:54,080
یامل برویم،
197
00:07:54,080 –> 00:07:58,160
خوب پس اینجا داریم uh
198
00:07:58,160 –> 00:08:00,960
ابتدا این ظرف
199
00:08:00,960 –> 00:08:03,360
نمونه ای از جستجوی استثناء علف های هرز در
200
00:08:03,360 –> 00:08:06,639
اتاق l.jaml است که بسته ای است که ما
201
00:08:06,639 –> 00:08:07,360
در حال
202
00:08:07,360 –> 00:08:10,560
اجبار آن هستیم و می توانیم در اینجا ببینیم که ما
203
00:08:10,560 –> 00:08:11,039
204
00:08:11,039 –> 00:08:12,800
تا حدودی تنظیمات مشابهی داریم
205
00:08:12,800 –> 00:08:14,720
206
00:08:14,720 –> 00:08:17,840
و ماژول اترها را وارد می کنیم. در اینجا
207
00:08:17,840 –> 00:08:19,599
ما یک تابع ورودی test1 داریم و
208
00:08:19,599 –> 00:08:21,039
یک تابع اصلی در اینجا داریم و این
209
00:08:21,039 –> 00:08:22,400
تابع اصلی در اینجا فراخوانی می شود
210
00:08:22,400 –> 00:08:26,000
، بنابراین وقتی اگر
211
00:08:26,000 –> 00:08:28,160
این اسکریپت را اجرا کنیم این تابع فراخوانی می شود
212
00:08:28,160 –> 00:08:29,120
213
00:08:29,120 –> 00:08:30,720
و می بینیم که
214
00:08:30,720 –> 00:08:32,479
تنظیمات قبلی را داریم. جایی که ما
215
00:08:32,479 –> 00:08:34,000
آدرسی داریم که تنظیم شده است و
216
00:08:34,000 –> 00:08:35,360
آرگومان دوم
217
00:08:35,360 –> 00:08:38,559
تابع ورودی ما بود و
218
00:08:38,559 –> 00:08:40,479
اینها مانند بایت های تصادفی موتور اول ما هستند
219
00:08:40,479 –> 00:08:42,320
و سپس
220
00:08:42,320 –> 00:08:44,640
با فراخوانی متد fuss در آتروس خود اولین اجرا را درست در اینجا اجرا می
221
00:08:44,640 –> 00:08:45,680
222
00:08:45,680 –> 00:08:49,200
کنیم. ماژول
223
00:08:49,200 –> 00:08:51,279
و ما می توانیم ببینیم که پس از آن چیزهای کمی
224
00:08:51,279 –> 00:08:52,399
در اینجا اتفاق می افتد، بنابراین
225
00:08:52,399 –> 00:08:53,839
اساسا ما چیزی را ایجاد می کنیم که در
226
00:08:53,839 –> 00:08:55,600
اینجا ارائه دهنده داده سریع نامیده می شود
227
00:08:55,600 –> 00:08:58,399
و کاری که می تواند برای ما انجام دهد این است
228
00:08:58,399 –> 00:08:59,040
که
229
00:08:59,040 –> 00:09:01,920
می تواند به ما کمک کند مجموعه ای از این
230
00:09:01,920 –> 00:09:03,760
بایت های خام را تبدیل کنیم. از fossa که این
231
00:09:03,760 –> 00:09:04,640
بایتهای ورودی هستند
232
00:09:04,640 –> 00:09:07,200
، میتواند به ما کمک کند آن دادهها
233
00:09:07,200 –> 00:09:08,560
را به
234
00:09:08,560 –> 00:09:11,040
انواع دادههای مفیدتر تبدیل کنیم، به عنوان مثال یک
235
00:09:11,040 –> 00:09:13,200
رشته یونیکد تا بتوانیم آیا این نوع
236
00:09:13,200 –> 00:09:13,760
237
00:09:13,760 –> 00:09:15,600
ارائهدهنده داده اولیه چیزی است که
238
00:09:15,600 –> 00:09:18,080
میتواند بایتهای خام را از
239
00:09:18,080 –> 00:09:20,000
اولین نوع ما است و انواع داده های مناسبی را به ما ارائه می دهد
240
00:09:20,000 –> 00:09:22,560
ک