Introduction
A lot of ordinary computer users understand what a password is. It protects their sensitive data and it's all they need to get access to a majority of accounts. It's also that all-important word that will allow them to access their significant other's Facebook profile while they're away to make sure they haven't been cheating and the PIN or pattern for their phone that betrays them access to their partner's deepest, darkest secrets.
Not surprisingly, many people will resort to anything to gain access to someone's personal data, when properly motivated. All manner of excuses crop up as to why they are exonerated from any crime or guilt for doing so.
"I know he's cheating" or "I'm only doing it for a prank. I'm not hurting anybody."Honestly, these are the cheapest, weakest excuses for invading someone's privacy. First, if you need to resort to betraying someone's privacy to determine whether you should trust them or not, you already have your answer. If you can't trust your significant other to be faithful and they can't trust you to keep your nose out of their business, why are you with that person in the first place?Ok, now that that little slap in the head is over with...let's get on with the real meat of this article.
How Passwords Work
There's actually a science to password security that only recently became widely adopted and understood by people that use them almost daily. You might be surprised, but the majority of passwords are a mere six to eight characters long and only use a single word in all lowercase. These are considered extremely weak passwords for a lot of reasons, but we'll get to that later.
The biggest problem with passwords is storage. Your passwords are perfect measures of security as long as they remain 100% secret, but unfortunately, that's almost impossible. The password becomes 100% useless once it gets exposed or an unauthorized person sees it. So, how do companies, websites, and credential managers store passwords so that nobody, not even themselves, can see them? They use encryption.
Encryption is an old stand-by method used since ancient times to confuse someone who would attempt to intercept and read messages that were not intended for them. Traditionally, there's a cipher and a key, a mathematical formula that scrambles or conceals the message, and a key which reveals or unscrambles it. One without the other makes the message useless. If you don't know the cipher or how it works, the key doesn't work, and if you don't know the key, you cannot unlock the cipher. This is basic encryption.
With modern encryption, we use complicated mathematical formulas (algorithms) that make it almost impossible for a human, without the aid of a computer, to unlock a cipher. It simply takes too long. The goal of encryption is to make data so difficult to decipher that it becomes irrelevant or worthless to the interceptor. Therefore, time is the greatest factor when discussing encryption. The longer the data stays encrypted, the more secure it is.
With passwords, a special type of encryption is used that results in what's called a "one-way hash." This is a special type of algorithm that has no key. Essentially, it only encrypts, but it does not decrypt. It cannot be undone. This protects the original password from being found, and also makes it more secure by adding additional characters to it.
So, when a user wants to access their account, they use their password. The server will take this password and run it through its hash algorithm to produce a one-way hash. Then, it will compare the user's password to the stored hash (which was created when the user made their account). If the hash matches, then the user is permitted access. Ideally, no two hashes can ever match. Changing just one character produces a wildly different hash that cannot be, in any way, related to another.
If a hacker wants to access that account, he would have to steal the hash and then use brute-force techniques to try every possible password combination and use the correct hash algorithm (and there are many) until he found the original password, which produces the same, unique hash.
It is infinitely more secure than storing the passwords in plaintext, meaning without encryption. However, this still isn't secure enough! The reason is that people are predictable and often use the same, weak passwords all the time. In fact, hackers and security researchers alike have compiled lists of BILLIONS of passwords that are most commonly and even not-so-commonly used by people. It's simply due to the fact that there are so many people in the world, odds are, your password, no matter how unique you think it is, matches someone else's somewhere in the world. That can be a problem!
But, there is another way to further secure these passwords to make it a lot harder to predict and compile lists of passwords and the easiest way to do that is with hashing. You can further secure these password hashes by adding salts to them. A salt is a tiny addition to a password hash that gets attached to the password when the account is created. It gets thrown into the equation and scrambles the password into a totally different hash that makes it even more unique.
Hash salts are usually based on a user's account name or a piece of their private information when they create the account, which a hacker wouldn't know very easily. Often, the salt secret is usually kept even more closely guarded by the site admins than the user password database (storage location).
For example, say we have the following example of a password database: I have two users with the same password...really WEAK passwords. If a hacker figures out one of their passwords, then they will have both, because they would match. The user's passwords are P@SSW0RD, which, when run through the MD5 algorithm, produces the following hash:
b46f685f85e0af830d82ddbbe795eff3
By adding a unique salt, I can do something about that. I created a quick Javascript program that takes the user's name, and pulls the first and last three letters from their username and makes them into a salt. Then, the program takes the salt, plus the user's password, and runs them through the MD5 algorithm and produces the hash that will be their password. Take a look at the results below.Username | Password | HASH
UserNumeroUno | P@SSW0RD | 52743b4d6f93a6827d887f428ea84f43UserNumberOne | P@SSW0RD | c9230eef666f58dedddeeaa18b395606Just to clarify.
UserNumeroUno's salt would be "Uuno" and UserNumberOne's salt would be "Uone" var HASH = md5(salt + password);
Try it out for yourself with different passwords and you can see how interesting effects can be done with salts to secure passwords further. The problem is, salts don't protect you against weak passwords to begin with.
No matter how good a hashing algorithm is, it merely protects the password from getting stolen and used immediately. It increases the amount of time it takes for the hacker to reveal the true password and gives the administrators time to discover that there was a breach and notify their customers in time to change their passwords. Simply put, hashing is a delay tactic. As I mentioned, password protection, encryption, and cracking is all about time.
The more time it takes a hacker to uncover the password, the more likely he is to give up on it, and the more time a security researcher has to figure out what went wrong to fix the problem. In reality, both of these users are using a terrible password which could be cracked in a day at most, probably a few hours if the attacker knows what to expect, or even seconds with a good old dictionary attack.
Let's explore the mathematical implications of a good, strong password so that you can understand... *play the fanfare*
The Math!
If you didn't guess by now, you should know that password cracking, and just computing in general, is very math-heavy. In fact, it's so math heavy, that if you don't properly throttle back your computer when breaking passwords, you can literally bake the silicone inside of it to a paste. That being said, password cracking is a very intense process and a huge game of numbers. There are reasons why your annoying network admins keep telling you to use long, complex passwords. Be honest with yourself, do you use the same password in more than one location? If so, you're doing yourself a disservice and exposing yourself to potential threats. So, mathematically speaking, a password is weak because it's not only predictable, but also finite in that it only would take someone so many guesses before arriving at the correct one. This is why length and complexity affect the strength of a password so strongly because it increases your chances of creating a unique and unknown password. This is something that can also be reproduced with a very simple mathematical formula:S = C^L (That's c raised to the power of L), where C = the password complexity or number of unique characters, and L is the length of the password, and S is the overall password strength. This is why it's insisted on by experts in the industry (who know what they're talking about) that you should always prioritize Length over Complexity.
Complexity
Complexity is affected by the unique characters in a password. The number of unique characters in a password *multiplies* its strength. Note I say "multiplies." Complexity is dependent upon your key-space. For the sake of this example, assume that we're not "guessing" passwords and simply using brute-force to crack the password. When you create a password like "p4ssw0rd" you are using only two keyspaces - lowercase and numerical. This is the alpha-numeric keyspace standard which accounts for no less than 50% of the passwords in use today. Alpha-numeric is a very weak keyspace and here's why: there are 26 letters in the English alphabet, and 10 unique numbers (0-9). That's a total of 36 letters of entropy. Compare that to the 96, standard UTF-8 unique characters on a keyboard, including alpha-lowercase and alpha-uppercase, the space bar and all the unique symbols. Since most password crackers will try lowercase alpha-numeric first (because it's the fastest and most common), your chances of getting your password cracked is a lot higher, compared to someone who includes at least one symbol, uppercase letter, and a space in their password, which are not so common. So, a with the password "p4ssw0rd", you have 8 characters, but only 26+10 potential unique characters for complexity. That's a total of (36^8) = 2,821,109,907,456 (~2.8 trillion) possible passwords. But here's the thing. That is only POTENTIAL strength. Because this only assumes that the attacker is using brute force based on the knowledge that you are using alphanumeric case without knowing any of the letters or numbers in the password. If he knows that you have at least one "s" in your password, that eliminates two unique characters, bringing you down to only 34 potential characters. That takes you down to 1.7 trillion possible passwords! That cuts your password count down by almost half! Why such a big difference? Because of the exponential function of length, which brings me to the next topic.
Length
I'm going to give you two passwords:
P@$$w3rd!
i love my super secure password
Which do you think is stronger? If you guessed the latter, you would be right. The reason is because the second password is longer and mathematically superior to the first.
Let's do the formula again: For the first password, we assume it uses full keyspace. That gives it a complexity value of 96 characters. Nice! But it only has 9 characters in length compared to the second. That leaves us with 96^9.
Now, for the second password. It only uses lowercase letters and spaces, so we only have 27 unique characters. (We are assuming the attacker will include spaces in his alphanumeric keyspace.) However, the password is extraordinarily long at 31 characters. That leaves us with 27^31.
If you passed 6th grade math, you should already guess that the second password will force the attacker to go through more password attempts compared to the first.
How many passwords?
First password: ~ 6.9 quintillion attempts. (or 69 followed by 16 zeros)
Second password: ~ 235 trindecillion attempts (or 235 followed by 42 zeros) WOW! That's a huge difference! Imagine if you just replaced the first letter of each word with a capital letter. That would almost double our complexity! However, this password is only mathematically superior. Against a hybrid dictionary attack, it would significantly weaken it, but that's a discussion for another tutorial.
Building a Strong Password
It's not difficult to construct a significantly strong password that is up to the task of defeating your typical brute-force attack. Most password crackers will give up if they do not get a result within a few days, maybe two weeks at most if they are patient. Your goal is to create a password that is long, complex, and easy to remember. A password isn't much good to you if you, yourself cannot remember it. That's actually really easy to do. Take my example from the above scenario, and apply it to a password that you want to make secure. Using random words that do not usually go together, you can make a very strong password.2Yams+1Shower=???2 Roads Diverged.3lementary, dear Watson! All of these passwords I gave you as examples are over 12 characters long, easy to remember, and aren't something you would ordinarily guess. Even with a hybrid dictionary attack, an attacker would be hard-pressed to get the correct combination of words, symbols, and numbers replacing the correct characters, and that assumes they had at least some idea of what your password was, which is unlikely if you maintain a good personal security policy. Mind you, not every site you use will let you use extraordinarily long passwords or symbols, so you'll have to learn to substitute characters and shorten them appropriately. It is most important to recognize that just because it's difficult for YOU to remember a password, does not automatically mean that it will be difficult to guess, especially not for a computer. I always like to quote the XKCD web comic which illustrates my point effectively.
A special thanks is owed to Randall Monroe, the author of XKCD and his math-y/science-y humor, which I greatly appreciate.
________________________________________________________________________________
Conclusion
The subtle science of password cracking and the brutal math of cryptography is not as difficult to understand as some would have you believe. In fact, many programmers aren't great mathematicians. They simply know how to manipulate a computer into doing all the thinking for them, since our brain-meats are so woefully unequipped for the task of calculating higher mathematics at a rate of millions of iterations per second.
We will discuss the actual process of password cracking, how it is done, what tools can be applied to it, and the effort required to crack weak versus strong passwords.
(This posting originated from "The DepthSec Archive as written by "True Demon" March 23, 2016)
The Open Worldwide Application Security Project (OWASP) is a community-led organization and has been around for over 20 years and is largely known for its Top 10 web application security risks (check out our course on it). As the use of generative AI and large language models (LLMs) has exploded recently, so too has the risk to privacy and security by these technologies. OWASP, leading the charge for security, has come out with its Top 10 for LLMs and Generative AI Apps this year. In this blog post we’ll explore the Top 10 risks and explore examples of each as well as how to prevent these risks.
LLM01: Prompt Injection
Those familiar with the OWASP Top 10 for web applications have seen the injection category before at the top of the list for many years. This is no exception with LLMs and ranks as number one. Prompt Injection can be a critical vulnerability in LLMs where an attacker manipulates the model through crafted inputs, leading it to execute unintended actions. This can result in unauthorized access, data exfiltration, or social engineering. There are two types: Direct Prompt Injection, which involves "jailbreaking" the system by altering or revealing underlying system prompts, giving an attacker access to backend systems or sensitive data, and Indirect Prompt Injection, where external inputs (like files or web content) are used to manipulate the LLM's behavior.
As an example, an attacker might upload a resume containing an indirect prompt injection, instructing an LLM-based hiring tool to favorably evaluate the resume. When an internal user runs the document through the LLM for summarization, the embedded prompt makes the LLM respond positively about the candidate’s suitability, regardless of the actual content.
How to prevent prompt injection:
- Limit LLM Access: Apply the principle of least privilege by restricting the LLM's access to sensitive backend systems and enforcing API token controls for extended functionalities like plugins.
- Human Approval for Critical Actions: For high-risk operations, require human validation before executing, ensuring that the LLM's suggestions are not followed blindly.
- Separate External and User Content: Use frameworks like ChatML for OpenAI API calls to clearly differentiate between user prompts and untrusted external content, reducing the chance of unintentional action from mixed inputs.
- Monitor and Flag Untrusted Outputs: Regularly review LLM outputs and mark suspicious content, helping users to recognize potentially unreliable information.
LLM02: Insecure Output Handling
Insecure Output Handling occurs when the outputs generated by a LLM are not properly validated or sanitized before being used by other components in a system. Since LLMs can generate various types of content based on input prompts, failing to handle these outputs securely can introduce risks like cross-site scripting (XSS), server-side request forgery (SSRF), or even remote code execution (RCE). Unlike Overreliance (LLM09), which focuses on the accuracy of LLM outputs, Insecure Output Handling specifically addresses vulnerabilities in how these outputs are processed downstream.
As an example, there could be a web application that uses an LLM to summarize user-provided content and renders it back in a webpage. An attacker submits a prompt containing malicious JavaScript code. If the LLM’s output is displayed on the webpage without proper sanitization, the JavaScript will execute in the user’s browser, leading to XSS. Alternatively, if the LLM’s output is sent to a backend database or shell command, it could allow SQL injection or remote code execution if not properly validated.
How to prevent Insecure Output Handling:
- Zero-Trust Approach: Treat the LLM as an untrusted source, applying strict allow list validation and sanitization to all outputs it generates, especially before passing them to downstream systems or functions.
- Output Encoding: Encode LLM outputs before displaying them to end users, particularly when dealing with web content where XSS risks are prevalent.
- Adhere to Security Standards: Follow the OWASP Application Security Verification Standard (ASVS) guidelines, which provide strategies for input validation and sanitization to protect against code injection risks.
LLM03: Training Data Poisoning
Training Data Poisoning refers to the manipulation of the data used to train LLMs, introducing biases, backdoors, or vulnerabilities. This tampered data can degrade the model's effectiveness, introduce harmful biases, or create security flaws that malicious actors can exploit. Poisoned data could lead to inaccurate or inappropriate outputs, compromising user trust, harming brand reputation, and increasing security risks like downstream exploitation.
As an example, there could be a scenario where an LLM is trained on a dataset that has been tampered with by a malicious actor. The poisoned dataset includes subtly manipulated content, such as biased news articles or fabricated facts. When the model is deployed, it may output biased information or incorrect details based on the poisoned data. This not only degrades the model’s performance but can also mislead users, potentially harming the model’s credibility and the organization’s reputation.
How to prevent Training Data Poisoning:
- Data Validation and Vetting: Verify the sources of training data, especially when sourcing from third-party datasets. Conduct thorough checks on data integrity, and where possible, use trusted data sources.
- Machine Learning Bill of Materials (ML-BOM): Maintain an ML-BOM to track the provenance of training data and ensure that each source is legitimate and suitable for the model’s purpose.
- Sandboxing and Network Controls: Restrict access to external data sources and use network controls to prevent unintended data scraping during training. This helps ensure that only vetted data is used for training.
- Adversarial Robustness Techniques: Implement strategies like federated learning and statistical outlier detection to reduce the impact of poisoned data. Periodic testing and monitoring can identify unusual model behaviors that may indicate a poisoning attempt.
- Human Review and Auditing: Regularly audit model outputs and use a human-in-the-loop approach to validate outputs, especially for sensitive applications. This added layer of scrutiny can catch potential issues early.
LLM04: Model Denial of Service
Model Denial of Service (DoS) is a vulnerability in which an attacker deliberately consumes an excessive amount of computational resources by interacting with a LLM. This can result in degraded service quality, increased costs, or even system crashes. One emerging concern is manipulating the context window of the LLM, which refers to the maximum amount of text the model can process at once. This makes it possible to overwhelm the LLM by exceeding or exploiting this limit, leading to resource exhaustion.
As an example, an attacker may continuously flood the LLM with sequential inputs that each reach the upper limit of the model’s context window. This high-volume, resource-intensive traffic overloads the system, resulting in slower response times and even denial of service. As another example, if an LLM-based chatbot is inundated with a flood of recursive or exceptionally long prompts, it can strain computational resources, causing system crashes or significant delays for other users.
How to prevent Model Denial of Service:
- Rate Limiting: Implement rate limits to restrict the number of requests from a single user or IP address within a specific timeframe. This reduces the chance of overwhelming the system with excessive traffic.
- Resource Allocation Caps: Set caps on resource usage per request to ensure that complex or high-resource requests do not consume excessive CPU or memory. This helps prevent resource exhaustion.
- Input Size Restrictions: Limit input size according to the LLM's context window capacity to prevent excessive context expansion. For example, inputs exceeding a predefined character limit can be truncated or rejected.
- Monitoring and Alerts: Continuously monitor resource utilization and establish alerts for unusual spikes, which may indicate a DoS attempt. This allows for proactive threat detection and response.
- Developer Awareness and Training: Educate developers about DoS vulnerabilities in LLMs and establish guidelines for secure model deployment. Understanding these risks enables teams to implement preventative measures more effectively.
LLM05: Supply Chain Vulnerabilities
Supply Chain attacks are incredibly common and this is no different with LLMs, which, in this case refers to risks associated with the third-party components, training data, pre-trained models, and deployment platforms used within LLMs. These vulnerabilities can arise from outdated libraries, tampered models, and even compromised data sources, impacting the security and reliability of the entire application. Unlike traditional software supply chain risks, LLM supply chain vulnerabilities extend to the models and datasets themselves, which may be manipulated to include biases, backdoors, or malware that compromises system integrity.
As an example, an organization uses a third-party pre-trained model to conduct economic analysis. If this model is poisoned with incorrect or biased data, it could generate inaccurate results that mislead decision-making. Additionally, if the organization uses an outdated plugin or compromised library, an attacker could exploit this vulnerability to gain unauthorized access or tamper with sensitive information. Such vulnerabilities can result in significant security breaches, financial loss, or reputational damage.
How to prevent Supply Chain Vulnerabilities:
- Vet Third-Party Components: Carefully review the terms, privacy policies, and security measures of all third-party model providers, data sources, and plugins. Use only trusted suppliers and ensure they have robust security protocols in place.
- Maintain a Software Bill of Materials (SBOM): An SBOM provides a complete inventory of all components, allowing for quick detection of vulnerabilities and unauthorized changes. Ensure that all components are up-to-date and apply patches as needed.
- Use Model and Code Signing: For models and external code, employ digital signatures to verify their integrity and authenticity before use. This helps ensure that no tampering has occurred.
- Anomaly Detection and Robustness Testing: Conduct adversarial robustness tests and anomaly detection on models and data to catch signs of tampering or data poisoning. Integrating these checks into your MLOps pipeline can enhance overall security.
- Implement Monitoring and Patching Policies: Regularly monitor component usage, scan for vulnerabilities, and patch outdated components. For sensitive applications, continuously audit your suppliers’ security posture and update components as new threats emerge.
LLM06: Sensitive Information Disclosure
Sensitive Information Disclosure in LLMs occurs when the model inadvertently reveals private, proprietary, or confidential information through its output. This can happen due to the model being trained on sensitive data or because it memorizes and later reproduces private information. Such disclosures can result in significant security breaches, including unauthorized access to personal data, intellectual property leaks, and violations of privacy laws.
As an example, there could be an LLM-based chatbot trained on a dataset containing personal information such as users’ full names, addresses, or proprietary business data. If the model memorizes this data, it could accidentally reveal this sensitive information to other users. For instance, a user might ask the chatbot for a recommendation, and the model could inadvertently respond with personal information it learned during training, violating privacy rules.
How to prevent Sensitive Information Disclosure:
- Data Sanitization: Before training, scrub datasets of personal or sensitive information. Use techniques like anonymization and redaction to ensure no sensitive data remains in the training data.
- Input and Output Filtering: Implement robust input validation and sanitization to prevent sensitive data from entering the model’s training data or being echoed back in outputs.
- Limit Training Data Exposure: Apply the principle of least privilege by restricting sensitive data from being part of the training dataset. Fine-tune the model with only the data necessary for its task, and ensure high-privilege data is not accessible to lower-privilege users.
- User Awareness: Make users aware of how their data is processed by providing clear Terms of Use and offering opt-out options for having their data used in model training.
- Access Controls: Apply strict access control to external data sources used by the LLM, ensuring that sensitive information is handled securely throughout the system
LLM07: Insecure Plugin Design
Insecure Plugin Design vulnerabilities arise when LLM plugins, which extend the model’s capabilities, are not adequately secured. These plugins often allow free-text inputs and may lack proper input validation and access controls. When enabled, plugins can execute various tasks based on the LLM’s outputs without further checks, which can expose the system to risks like data exfiltration, remote code execution, and privilege escalation. This vulnerability is particularly dangerous because plugins can operate with elevated permissions while assuming that user inputs are trustworthy.
As an example, there could be a weather plugin that allows users to input a base URL and query. An attacker could craft a malicious input that directs the LLM to a domain they control, allowing them to inject harmful content into the system. Similarly, a plugin that accepts SQL “WHERE” clauses without validation could enable an attacker to execute SQL injection attacks, gaining unauthorized access to data in a database.
How to prevent Insecure Plugin Design:
- Enforce Parameterized Input: Plugins should restrict inputs to specific parameters and avoid free-form text wherever possible. This can prevent injection attacks and other exploits.
- Input Validation and Sanitization: Plugins should include robust validation on all inputs. Using Static Application Security Testing (SAST) and Dynamic Application Security Testing (DAST) can help identify vulnerabilities during development.
- Access Control: Follow the principle of least privilege, limiting each plugin's permissions to only what is necessary. Implement OAuth2 or API keys to control access and ensure only authorized users or components can trigger sensitive actions.
- Manual Authorization for Sensitive Actions: For actions that could impact user security, such as transferring files or accessing private repositories, require explicit user confirmation.
- Adhere to OWASP API Security Guidelines: Since plugins often function as REST APIs, apply best practices from the OWASP API Security Top 10. This includes securing endpoints and applying rate limiting to mitigate potential abuse.
LLM08: Excessive Agency
Excessive Agency in LLM-based applications arises when models are granted too much autonomy or functionality, allowing them to perform actions beyond their intended scope. This vulnerability occurs when an LLM agent has access to functions that are unnecessary for its purpose or operates with excessive permissions, such as being able to modify or delete records instead of only reading them. Unlike Insecure Output Handling, which deals with the lack of validation on the model’s outputs, Excessive Agency pertains to the risks involved when an LLM takes actions without proper authorization, potentially leading to confidentiality, integrity, and availability issues.
As an example, there could be an LLM-based assistant that is given access to a user's email account to summarize incoming messages. If the plugin that is used to read emails also has permissions to send messages, a malicious prompt injection could trick the LLM into sending unauthorized emails (or spam) from the user's account.
How to prevent Excessive Agency:
- Restrict Plugin Functionality: Ensure plugins and tools only provide necessary functions. For example, if a plugin is used to read emails, it should not include capabilities to delete or send emails.
- Limit Permissions: Follow the principle of least privilege by restricting plugins’ access to external systems. For instance, a plugin for database access should be read-only if writing or modifying data is not required.
- Avoid Open-Ended Functions: Avoid functions like “run shell command” or “fetch URL” that provide broad system access. Instead, use plugins that perform specific, controlled tasks.
- User Authorization and Scope Tracking: Require plugins to execute actions within the context of a specific user's permissions. For example, using OAuth with limited scopes helps ensure actions align with the user’s access level.
- Human-in-the-Loop Control: Require user confirmation for high-impact actions. For instance, a plugin that posts to social media should require the user to review and approve the content before it is published.
- Authorization in Downstream Systems: Implement authorization checks in downstream systems that validate each request against security policies. This prevents the LLM from making unauthorized changes directly.
LLM09: Overreliance
Overreliance occurs when users or systems trust the outputs of a LLM without proper oversight or verification. While LLMs can generate creative and informative content, they are prone to “hallucinations” (producing false or misleading information) or providing authoritative-sounding but incorrect outputs. Overreliance on these models can result in security risks, misinformation, miscommunication, and even legal issues, especially if LLM-generated content is used without validation. This vulnerability becomes especially dangerous in cases where LLMs suggest insecure coding practices or flawed recommendations.
As an example, there could be a development team using an LLM to expedite the coding process. The LLM suggests an insecure code library, and the team, trusting the LLM, incorporates it into their software without review. This introduces a serious vulnerability. As another example, a news organization might use an LLM to generate articles, but if they don’t validate the information, it could lead to the spread of disinformation.
How to prevent Overreliance:
- Regular Monitoring and Review: Implement processes to review LLM outputs regularly. Use techniques like self-consistency checks or voting mechanisms to compare multiple model responses and filter out inconsistencies.
- Cross-Verification: Compare the LLM’s output with reliable, trusted sources to ensure the information’s accuracy. This step is crucial, especially in fields where factual accuracy is imperative.
- Fine-Tuning and Prompt Engineering: Fine-tune models for specific tasks or domains to reduce hallucinations. Techniques like parameter-efficient tuning (PET) and chain-of-thought prompting can help improve the quality of LLM outputs.
- Automated Validation: Use automated validation tools to cross-check generated outputs against known facts or data, adding an extra layer of security.
- Risk Communication: Clearly communicate the limitations of LLMs to users, highlighting the potential for errors. Transparent disclaimers can help manage user expectations and encourage cautious use of LLM outputs.
- Secure Coding Practices: For development environments, establish guidelines to prevent the integration of potentially insecure code. Avoid relying solely on LLM-generated code without thorough review.
LLM10: Model Theft
Model Theft refers to the unauthorized access, extraction, or replication of proprietary LLMs by malicious actors. These models, containing valuable intellectual property, are at risk of exfiltration, which can lead to significant economic and reputational loss, erosion of competitive advantage, and unauthorized access to sensitive information encoded within the model. Attackers may steal models directly from company infrastructure or replicate them by querying APIs to build shadow models that mimic the original. As LLMs become more prevalent, safeguarding their confidentiality and integrity is crucial.
As an example, an attacker could exploit a misconfiguration in a company’s network security settings, gaining access to their LLM model repository. Once inside, the attacker could exfiltrate the proprietary model and use it to build a competing service. Alternatively, an insider may leak model artifacts, allowing adversaries to launch gray box adversarial attacks or fine-tune their own models with stolen data.
How to prevent Model Theft:
- Access Controls and Authentication: Use Role-Based Access Control (RBAC) and enforce strong authentication mechanisms to limit unauthorized access to LLM repositories and training environments. Adhere to the principle of least privilege for all user accounts.
- Supplier and Dependency Management: Monitor and verify the security of suppliers and dependencies to reduce the risk of supply chain attacks, ensuring that third-party components are secure.
- Centralized Model Inventory: Maintain a central ML Model Registry with access controls, logging, and authentication for all production models. This can aid in governance, compliance, and prompt detection of unauthorized activities.
- Network Restrictions: Limit LLM access to internal services, APIs, and network resources. This reduces the attack surface for side-channel attacks or unauthorized model access.
- Continuous Monitoring and Logging: Regularly monitor access logs for unusual activity and promptly address any unauthorized access. Automated governance workflows can also help streamline access and deployment controls.
- Adversarial Robustness: Implement adversarial robustness training to help detect extraction queries and defend against side-channel attacks. Rate-limit API calls to further protect against data exfiltration.
- Watermarking Techniques: Embed unique watermarks within the model to track unauthorized copies or detect theft during the model’s lifecycle.
Wrapping it all up
As LLMs continue to grow in capability and integration across industries, their security risks must be managed with the same vigilance as any other critical system. From Prompt Injection to Model Theft, the vulnerabilities outlined in the OWASP Top 10 for LLMs highlight the unique challenges posed by these models, particularly when they are granted excessive agency or have access to sensitive data. Addressing these risks requires a multifaceted approach involving strict access controls, robust validation processes, continuous monitoring, and proactive governance.
For technical leadership, this means ensuring that development and operational teams implement best practices across the LLM lifecycle starting from securing training data to ensuring safe interaction between LLMs and external systems through plugins and APIs. Prioritizing security frameworks such as the OWASP ASVS, adopting MLOps best practices, and maintaining vigilance over supply chains and insider threats are key steps to safeguarding LLM deployments. Ultimately, strong leadership that emphasizes security-first practices will protect both intellectual property and organizational integrity, while fostering trust in the use of AI technologies.