Развој софтвера и програмирање, који су се некада сматрали подухватима који су захтевали дубоку стручност, сада могу да раде сви који користе природни језик. Функција за коју су некада били потребни дани или месеци да се развије сада се може развити за неколико минута или сати захваљујући коду из АИ модела. На пример, ОпенАИ Цодек и Гоогле БЕРТ су обучени за програмирање веб блогова, питања о преливу стека итд.
Ови интелигентни модели креирају код кроз математичке вероватноће, док је такође познато да халуцинирају и представљају лажне информације. Истраживање које је спровела академска заједница тврди да је генерисање АИ кода водећи узрок 10 највећих рањивости и да скоро 40% кода има безбедносне грешке . Многи од водећих играча, заједно са новим СааС провајдерима, користе вештачку интелигенцију како би своје понуде учинили паметнијим. СааС програмери такође морају имати више знања о СааС алатима заснованим на вештачкој интелигенцији.
Праћење стандарда програмирања и квалитета кода диктира сигурност софтвера. Али, АИ модели су обучени за сваки део информација доступних на интернету. Квалитет кода, поузданост, безбедност и још много тога могу се разликовати од оних које генеришу људски програмери. Модел обучен на примерима веб развоја може садржати лоше праксе валидације података, на пример. Овај недостатак валидације може довести до безбедносних проблема када модел генерише код који усваја исте лоше праксе.
Без обзира на величину (милион или милијарду параметара), познато је да модели халуцинирају и дају погрешна предвиђања. Када типични програмер види код који производи вештачка интелигенција, пропустиће суптилне, али озбиљне безбедносне пропусте. Међутим, за програмера који има потпуно знање о дизајну и обрасцима развоја, недостаци су далеко од откривања. Програмери могу да искористе ове обрасце како би открили рањивости и ускладили се са најбољим СааС безбедносним праксама .
Модерни оквири и библиотеке се у великој мери ослањају на интерфејс/енум за закључивање и валидацију. Ово гарантује да код тачно ради свој посао и намеће сигурност. Код генерисан од вештачке интелигенције неће закључити ако га не усмеримо. Чак и након израде пажљивог упита, неусклађеност типова и примена провере можда неће одговарати случају употребе. Да би лоцирали и изменили неподударности кода, програмери морају бити добро свесни домена и пословних захтева.
def reciprocal(user_input): # Insecure implementation with no type inference or validation result = 100 / user_input return result
Програми деле објекте на јавни/приватни/заштићени начин. Функције и класе вишег реда наслеђују стање објекта тако што директно приступају јавним/заштићеним варијаблама ради извођења прорачуна. Ако се нешто уради погрешно у имплементацији или извршењу, лако може доћи до уских грла у безбедности или перформансама. СааС програмери морају на одговарајући начин имплементирати своју логику управљања стањем и контекстом и прегледати је за исправну и безбедну употребу.
class InsecureClass: def __init__(self, owner, balance, password): self.owner = owner # Public attribute self._balance = balance # Protected attribute self.__password = password # Private attribute # Public def def get_balance(self): return self._balance # Protected def def _update_balance(self, amount): self._balance += amount # Private def def __validate_password(self, input_password): return self.__password == input_password # Insecure def exposing private data def insecure_password_exposure(self): return self.__password
Услуге деле и примају информације преко мреже. Ових дана, безбедно повезивање и руковање подацима били су кључни за успех система заснованих на облаку. Када читате, обрађујете и делите осетљиве податке о организацијама путем дистрибуираних мрежа података, морају постојати јаки протоколи и безбедносне технике како би се спречило пресретање података . Користећи АИ, програмер СааС-а мора да имплементира сваки појединачни аспект архитектуре у пуноправне апликације.
#Insecure Data Sharing @app.route("/user/<int:user_id>", methods=["GET"]) def get_user(user_id): user = users.get(user_id) if user: return jsonify(user) # All user data exposed, including secrets # Insecure Data Handling @app.route("/update_email", methods=["POST"]) def update_email(): data = request.json() user_id = data.get("user_id") new_email = data.get("new_email") if user_id in users: users[user_id]["email"] = new_email # No validation of new_email return jsonify({"message": "Email updated successfully"})
У данашњем сајбер осетљивом свету, тесно
# Insecure authentication @app.route("/login", methods=["POST"]) def login(): data = request.json() email = data.get("email") password = data.get("password") for user_id, user in users.items(): if user["email"] == email and user["password"] == password: return jsonify({"message": "Login successful", "user_id": user_id})
АИ програмирање усмеравају библиотеке и оквири направљени од стране заједнице и отвореног кода. Људи подржавају нову технологију користећи ове обећавајуће алате и креирајући нове. Подаци на којима су ови модели обучени нису ажурирани, а могућности модела су замрзнуте, као и њихово знање. Са развојем технологије, многе функције ће постати застареле и неке библиотеке неће бити релевантне за тренутне потребе. СааС програмер има задатак да прегледа и користи важеће зависности како би се обезбедила функционалност и безбедност.
import md5 # Outdated library def insecure_hash_password(password): # Insecure password hashing done using the deprecated MD5 algorithm. return md5.new(password).hexdigest()
Напредне могућности кодирања великих језичких модела су последица њихових опсежних математичких прорачуна. Нису потребне никакве фенси технике да би био усаглашен са безбедносним и програмским стандардима. Можемо да користимо ове једноставне провере како бисмо код генерисан од вештачке интелигенције учинили безбедним и усаглашеним са стандардима:
Без обзира колико пажљиво прегледамо и ревидирамо код, шансе за људске грешке су увек присутне. Ослањање само на ручне ревизије није довољно јер морамо имати неке унапред дефинисане провере које могу тестирати и потврдити код чим уђе у систем контроле верзија. Каква боља провера од додавања Гитхуб акције која аутоматски покреће провере безбедности и квалитета када се подигне ПР.
name: Simple Security Checks for AI generated Code on: push: branches: - main pull_request: branches: - main jobs: security-and-quality-check: runs-on: ubuntu-latest Steps: - name: Repository checkout uses: actions/checkout@v3 - name: Python setup uses: actions/setup-python@v4 with: python-version: ">=3.9" - name: Dependency installation run: | python -m pip install --upgrade pip pip install bandit pytest - name: Identifying insecure libraries and patterns run: | echo "Checking for insecure patterns..." if grep -r "md5.new(" .; then echo "ERROR: Insecure MD5 hashing detected. Use hashlib.sha256 or bcrypt instead." exit 1 fi echo "No insecure patterns detected." - name: Scanning for security vulnerabilities run: | echo "Running Bandit security scanner..." bandit -r . - name: Running unit tests run: | echo "Running unit tests..." pytest test/unit --cmodopt=local - name: Notifying on failure if: failure() run: | send_slack_notification(“Unsafe code merge detected, fix immediately”)
Модели великих језика су прилично корисни алати за СааС програмере за генерисање кода и информација са природним захтевима. Међутим, они представљају безбедносне ризике и понекад испоручују неефикасан код који не одговара потребама предузећа. СааС програмери морају бити веома опрезни када користе ове алате и имплементирају код генерисан вештачком интелигенцијом за случајеве употребе у стварном животу. Овај практични водич се фокусира на факторе који настају и утичу на безбедносни став, док показује како да се превазиђу ови изазови.