એજન્ટ પર વિશ્વાસ કરવાનું બંધ કરો: મંજૂરીઓને ચોક્કસ ટૂલ કોલ્સ સાથે જોડો
મોટાભાગની એજન્ટિક સિસ્ટમ્સ ફાઇલ લખવી અથવા પૈસા ટ્રાન્સફર કરવા જેવી જોખમી ક્રિયાઓને એક સાદી મંજૂરી (approval) દ્વારા સુરક્ષિત કરે છે.
સામાન્ય રીતે, આ મંજૂરી સિસ્ટમ સ્ટેટમાં એક બુલિયન ફ્લેગ (boolean flag) હોય છે.
ઉદાહરણ: approved: true.
આ એક ભૂલ છે. બુલિયન ત્રણ રીતે નિષ્ફળ જાય છે જેનો હુમલાખોરો (attackers) ફાયદો ઉઠાવે છે:
- Flip: એક હુમલાખોર પ્રોમ્પ્ટ ઇન્જેક્શન અથવા કોડની ખામીઓ દ્વારા સ્ટેટને
falseથીtrueમાં બદલી નાખે છે. - Replay: તમે "read file" જેવી સુરક્ષિત કમાન્ડને મંજૂરી આપો છો. સિસ્ટમ "true" જુએ છે અને બીજી, જોખમી કમાન્ડ જેવી કે "delete database" ને મંજૂરી આપે છે.
- Argument Drift: તમે "send $10" ને મંજૂરી આપો છો. અમલીકરણ (execution) પહેલા હુમલાખોર રકમ બદલીને $10,000 કરી નાખે છે. ફ્લેગ હજુ પણ "true" જ દર્શાવે છે.
સમસ્યા એ છે કે તમે મંજૂરીને આખા સત્ર (session) ના ગુણધર્મ તરીકે મોડેલ કરી રહ્યા છો. તે એક ચોક્કસ કોલ માટે પુરાવો હોવો જોઈએ.
તેને કેવી રીતે સુધારવું:
જ્યારે કોઈ માનવી કોલને મંજૂરી આપે, ત્યારે એક સુરક્ષિત ટેગ (secure tag) બનાવો. આ ટેગ આ ચાર વસ્તુઓને લોક (lock) કરે છે:
- યુનિક ટૂલ કોલ ID.
- ચોક્કસ આર્ગ્યુમેન્ટ્સનો હેશ (hash).
- યુઝરની ઓળખ (user identity).
- એક્સપાયરી સમય (expiration time).
અમલીકરણના ચોક્કસ સમયે આ ટેગને વેરિફાય કરો. એવી સિક્રેટ કી (secret key) નો ઉપયોગ કરો જે ફક્ત સિસ્ટમ જ જાણે છે.
અમલીકરણ માટે આ નિયમોનું પાલન કરો:
- Use Canonicalization: મંજૂરી આપનાર અને અમલીકરણ કરનાર બંનેએ બરાબર સમાન બાઇટ્સનો હેશ કરવો જોઈએ. નંબરો અને કી મેચ થાય તેની ખાતરી કરવા માટે RFC 8785 નો ઉપયોગ કરો.
- Fail Closed: જો ટેગ ખૂટતો હોય, એક્સપાયર થયો હોય અથવા ખોટો હોય, તો ચોક્કસ "not approved" એરર રિટર્ન કરો. તેને સ્ટાન્ડર્ડ ટૂલ રિઝલ્ટ તરીકે ન ગણો.
- Deny by Default: ફક્ત એવા જ ટૂલ્સને મંજૂરી આપો જેમાં સ્પષ્ટ મંજૂરીની જરૂર હોય. બાકીના તમામ માટે ના પાડો.
- Handle Replays: જો તમે Temporal જેવા એન્જિનનો ઉપયોગ કરો છો, તો ખાતરી કરો કે તમારી સિક્રેટ કી ડિટરમિનિસ્ટિક (deterministic) છે. જો સિસ્ટમ રીસ્ટાર્ટ થયા પછી કી બદલાઈ જાય, તો તમામ હાલની મંજૂરીઓ નિષ્ફળ જશે.
ઓથોરાઈઝેશન (Authorization) એ સ્ટેટનો તરતો ટુકડો ન હોવો જોઈએ. તે એક બાઉન્ડ એન્વલપ (bound envelope) હોવું જોઈએ જે સાબિત કરે છે: "આ ચોક્કસ વ્યક્તિએ આ ચોક્કસ ટૂલ માટે આ ચોક્કસ સમય સુધી આ ચોક્કસ આર્ગ્યુમેન્ટ્સને મંજૂરી આપી છે."
બુલિયન્સનો ઉપયોગ કરવાનું બંધ કરો. તે સરળતા નથી. તે એક બગ (bug) છે.
વૈકલ્પિક લર્નિંગ કોમ્યુનિટી: https://t.me/GyaanSetuAi