ویرگول
ورودثبت نام
پدرام پاک نیا
پدرام پاک نیامهندس امنیت سایبری | کارشناس ارشد هوش مصنوعی
پدرام پاک نیا
پدرام پاک نیا
خواندن ۶ دقیقه·۵ سال پیش

ساز و کار The Last Layer Attack در شبکه های عصبی

"ما در آخرین محصول امنیتی خودمون با استفاده از هوش مصنوعی و شبکه عصبی تونستیم امن ترین مکانیزم
Authentication با چهره رو پیاده سازی کنیم. این شبکه با اسکن نقطه به نقطه صورت افراد و یادگیری ماشین، امکان ورود و خروج رو فقط و فقط برای افراد Authorize شده فراهم میکنه."




احتمالا شما هم تا به حال با این تیپ ادعاها از طرف شرکت‌ ها رو به رو شدید. قوی ترین، سریع ترین، اولین و .. .

اما این ادعاها تا چه اندازه صحیح هستند؟ خب.. در اکثر مواقع فقط ترفند های بازاریابی هستند که توسط بخش مارکتینگ اون شرکت طراحی شدند و با واقعیت فاصله دارند.

امروزه اکثر شرکت ها سعی میکنند که هوش مصنوعی و یادگیری ماشین رو به نحوی در محصولات خودشان بکار بگیرند. مثل استفاده از تشخیص چهره برای دسته بندی عکس ها در گالری تلفن همراه و یا تشخیص متن از روی تصاویر برای ترجمه به زبان های مختلف.

تاثیر هوش مصنوعی در زندگی پیش رو انکار ناپذیر است و استفاده از آن باعث افزایش کیفیت سطح زندگی بشری می شود اما همیشه با پیدایش و استفاده گسترده از تکنولوژی، مخاطرات و نگرانی های امنیتی جدیدتری به وجود می آیند. به عنوان مثال، استفاده از خودرو علاوه بر افزایش بهره وری و سرعت حمل و نقل، خطر تصادفات را به وجود آورد و یا افزودن دوربین به تلفن همراه علاوه بر ثبت لحظات و خلق تجربه شخصی برای افراد، خطر جاسوسی از آن ها را همراه داشت.

انفجار هوش مصنوعی و علوم مرتبط با آن و استفاده روز افزون از ماشین های یادگیر و الگوریتم های مرتبط با آن در محصولات و یا خدمات شرکت ها، باعث فراگیر شدن و اعتماد بیشتر عموم مردم (کاربران) به این تکنولوژی ها شده تا عملا به بخش جدا ناپذیر در زندگی آن ها تبدیل شود.

استفاده از هوش مصنوعی در محصولات و خدمات سازمان ها از نگاه امنیتی موضوع بسیار مهمی است چرا که در پروسه طراحی و ساخت، مهندسین یادگیری ماشین و Data Scientist ها بیشترین نقش را دارند و در اکثر مواقع درک درستی از مخاطرات و نگرانی های امنیتی که ممکن است برای آن محصول/سرویس به وجود بیاید و یا توسط آن محصول/سرویس ایجاد شود ندارند. سازمان ها همانطور که امنیت وب سایت و شبکه خود را تامین می کنند، باید از محصولات/سرویس های مرتبط با هوش مصنوعی خود نیز دفاع نمایند.

با توجه شعار تبلیغاتی که در ابتدای این پست به آن اشاره شد، در ادامه به یک نمونه از حملات مرتبط به شبکه‌های عصبی می پردازم که در آن مهاجم به Model مرتبط به شبکه عصبی دست یافته است.

شبکه های عصبی بر اساس ساختار نورونی بدن جانداران طراحی شده اند. در ساده ترین حالت هر Node از یک شبکه عصبی به یک نورون تشبیه شده است که در صورت تحریک، Fire می شود و یک پالس الکتریکی را در Axon خودش منتشر می کند و به سایر نورون هایی که با آن ها ارتباط دارد می فرستد.

همانطور که از نام این حمله مشخص است، Exploit در آخرین لایه شبکه عصبی که وظیفه تصمیم گیری را دارد اتفاق می افتد. فرض می کنیم که شرکت مذکور، محصولی برای Authentication کاربران جهت ورود به Data Center تولید کرده است که با گرفتن تصویر فرد به عنوان Input وضعیت ورود و خروج او را بررسی می کند. طبیعتا خروجی شبکه عصبی دو حالت Access Granted و Access Denied می باشد.

در آخرین لایه، همانند تمامی لایه های قبلی مقدار عبارت w . x + b (وزن . ورودی + مقدار بایاس) محاسبه شده و از یک Activision Function می گذرد و خروجی این تابع مشخص می کند که فرد حق ورود دارد یا خیر. بردارهای Weight و Bias که برای Tune کردن شبکه عصبی کاربرد دارند می توانند توسط مهاجم برای Exploit کردن مورد استفاده قرار بگیرند.

در سال 2014 گروهی از محققین گوگل متوجه شدند که فریب دادن یک شبکه عصبی کار چندان دشواری نیست و می توان با افزودن نویز (داده دلخواه) به همراه ورودی شبکه عصبی، خروجی دلخواه را دریافت کرد.

برای درک بهتر، قطعه برنامه زیر، یک شبکه عصبی است که روی دیتاست mnist آموزش دیده و برای تشخیص اعداد از روی دست خط طراحی شده است.

# Network.py ---------------------------------------------------------- from tensorflow import keras
from tensorflow.keras import layers
mnist = keras.datasets.mnist
(train_images, train_lables), (test_images, test_lables) = mnist.load_data()
train_images = train_images.reshape((train_images.shape[0], 28, 28, 1))
test_images = test_images.reshape((test_images.shape[0], 28, 28, 1))
# Normalize: 0, 255 -> 0,1
train_images, test_images, train_images / 255.0, test_images / 255.0
# Model
model = keras.models.Sequential()
model.add(layers.Conv2D(32,3, strides=(1,1), padding ="valid", activation= "relu", input_shape=(28, 28, 1)))
model.add(layers.MaxPool2D((2,2)))
model.add(layers.Conv2D(32, 3, activation="relu"))
model.add(layers.MaxPool2D((2,2)))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation="relu"))
model.add(layers.Dense(10))
print(model.summary())
# Loss and optimizer
loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)
optim = keras.optimizers.Adam(lr=0.001)
metrics = ["accuracy"]
model.compile(optimizer=optim, loss=loss, metrics=metrics)
# Training
batch_size = 64
epochs = 5
model.fit(train_images, train_lables, epochs=epochs, batch_size=batch_size, verbose=2)
model.save("./model.h5")


همانطور که مشاهده می شود، شبکه عصبی بالا در لایه خروج (آخرین لایه) 10 عدد Node منحصر به فرد دارد که نشانگر اعداد 0 تا 9 می باشد. فرمت ذخیره سازی مدل h5 است. h5 برای ذخیره کردن داده ها به صورت سلسله مراتبی و از یک آرایه چند بعدی استفاده می کند. این فرمت ذخیره سازی در فیزیک، صنایع هوایی، جغرافیا، ستاره شناسی، علوم کامپیوتر و .. کاربرد دارد.

قطعه کد زیر برای Authentication طراحی شده است. ورودی (عکس) را با مدل آموزش دیده شبکه عصبی چک می کند. اگر خروجی برابر عدد 4 بود، کاربر اجازه ورود دارد. در غیر این صورت خیر.

# Access.py -------------------------------------------------- from tensorflow import keras
import numpy as np
from PIL import Image
image = Image.open("./fake_id.png")
image = np.asarray(image, dtype=np.float32)
image = image / 255.0
image = image.reshape((1, 28, 28, 1))
# Load the model
model = keras.models.load_model('./model.h5')
prediction = model.predict(image)
digit = np.argmax(prediction)
print(prediction)
print(digit)
# Only Digit 4 grants access !
if digit == 4:
print("Access Granted.")
else:
print("Access Denied.")


تصویر زیر به عنوان ورودی (Fake id) به برنامه داده شده است. طبیعتا پس از تشخیص عدد موجود در عکس (عدد 2)، برنامه در ادامه اجازه ورود به ما را نمی دهد.

خروجی برنامه به صورت زیر است :

برنامه مقدار تصویر بالا را برابر با عدد 8 شناسایی کرده است
برنامه مقدار تصویر بالا را برابر با عدد 8 شناسایی کرده است


حال قصد داریم با دستکاری مدلی که شبکه بر اساس آن آموزش دیده است خروجی مطلوب خودمان یعنی Access Granted را بدست آوریم. برای این کار باید فایل model.h5 را ویرایش کنیم. برای باز کردن این فایل نیاز به نرم افزار مخصوص به این کار را داریم. خوشبختانه شرکت سازنده این فرمت، نرم افزار مناسب برای ویرایش این فایل ها را نیز تولید کرده. نرم افزار HDFView را می توان از اینجا دانلود نمود.

پس از دانلود و نصب، فایل model.h5 را باز می کنیم. زیر شاخه dense_1 آخرین لایه شبکه عصبی هستند.

جدول bias شامل 10 سطر است که بیانگر خروجی شبکه یعنی اعداد 0 تا 9 می باشند. از آنجا که می دانیم خروجی دلخواه ما برای ورود عدد 4 است، سطر با id 4 را به بالاترین مقدار نسبت به بقیه سطر ها آپدیت می کنیم.

پس از ذخیره تغییرات، اگر قطعه کد Access.py را اجرا کنیم میبینیم که توانستیم مکانیزم امنیتی را دور بزنیم و شبکه را Exploit کنیم.


همانطور که مشاهده شد مهاجم با دستیابی به asset های مرتبط با هوش مصنوعی می تواند حملات متعددی از جمله Last Layer Attack انجام دهد. در سناریو مطرح شده مهاجم توانست با دستکاری bias در مدل آموزشی شبکه عصبی، مکانیزم Login را Bypass کند. در سایر موارد مانند استفاده از سیستم های مشابه برای خودرو های خودران، مهاجم میتواند معنای علائم جاده ای مثل تابلو ایست را تغییر دهد و خودرو به جای ایستادن به مسیر خود ادامه دهد.




نتیجه گیری

شرکت ها همواره مبالغ هنگفتی را صرف ایمن سازی شبکه و وب سایت ها و آموزش پرسنل خود می کنند. درحالی که با توجه به فراگیر شدن هوش مصنوعی باید تدابیر و راهکار های امنیتی در راستای حفاظت و ایمن سازی محصولات/سرویس ها به کار برد.

علاج واقعه پیش از وقوع باید کرد دریغ سود ندارد چو رفت کار از دست

به روزگار سلامت سلاح جنگ بساز وگرنه سیل چو بگرفت، سد نشاید بست

هوش مصنوعیحمله سایبرییادگیری ماشینامنیت سایبری
۶
۰
پدرام پاک نیا
پدرام پاک نیا
مهندس امنیت سایبری | کارشناس ارشد هوش مصنوعی
شاید از این پست‌ها خوشتان بیاید