What is Rust?

Introduction

Rust is a programming language created in 2015 by a small team of people, and later adopted by Mozilla.

It is a compiled low-level language, which aims to be as fast as C or C++, while incorporating some features from high-level languages such as Go, Python, or JavaScript.

Rust has three main goals:

  • Performance
  • Safety
  • Productivity

Performance

Rust aims to achieve performance similar to C or C++.

Rust is statically typed, which means the data type of a variable is known at compile time. This allows the compiler to optimize the code further than if we didn’t know the types.

Rust does not use garbage collection (despite being a low-level programming language). Garbage collection is where the program attempts to reclaim memory from objects no longer in use by the program.

Unlike languages like Python and JavaScript, Rust avoids these abstractions to minimize issues, making it a preferred choice for low-level programming.

Safety

Rust is designed to be completely memory safe. This means that memory-related exploits aren’t possible in Rust, unless you explicitly specify unsafe Rust code.

The Microsoft Security Response Centre reports that 70% of all CVEs assigned are memory safety issues. Microsoft states:

“This means that if that software had been written in Rust, 70% of these security issues would most likely have been eliminated. And we’re not the only company to have reported such findings.”

Rust provides tools to wrap unsafe actions, enabling static enforcement of unsafe code by the Rust compiler.

The memory safety is guaranteed by the concept of ownership, governed by these rules:

  • Each value has a variable, called an owner.
  • There can only be one owner at a time.
  • When the owner goes out of scope, the value will be dropped.

Values can be moved or borrowed between variables, but no value can have more than one owner.

Consider an example in Python:z

squares = (val * val for val in range(100))
print(min(squares))
print(max(squares))

What we want is:

0
9801

But what we get is:

>>> print(min(squares))
0
>>> print(max(squares))
Traceback (most recent call last):
  File "", line 1, in 
ValueError: max() arg is an empty sequence

This is because min alters the variable squares. It’s strange, because we just wanted the minimum — not to alter the whole variable!

In Rust, the same code is:

fn main()
   let squares = (0..100).map(|val| val * val);
   println!("{:?}", squares.min());
   println!("{:?}", squares.max());
}

When we try to compile this, Rust tells us:

error[E0382]: use of moved value: `squares`
 --> ownership.rs:4:21
  |
3 |    println!("{:?}", squares.min());
  |                     ------- value moved here
4 |    println!("{:?}", squares.max());
  |                     ^^^^^^^ value used here after move
  |
  = note: move occurs because `squares` has type `std::iter::Map<std::ops::Range, [closure@ownership.rs:2:31: 2:40]>`, which does not implement the `Copy` trait

The important part here is that Python allows functions to alter variables they do not own, whereas Rust doesn’t.

Productivity

Rust’s third major goal is productivity, and it provides a rich set of tools to support developers.

Note: The below list is read as:

  • Tool

Explanation of the above tool.

Some of these tools include:

  • Cargo

Rust’s version of NPM or PyPi. Download packages others have created.

  • Clippy

Microsoft Clippy, but re-imagined for Rust to aid with development.

  • RustFmt

Automatically formats Rust code.

  • Cargo Test

A built-in testing application created by the Rust developers.

  • Cargo docs

Automatically generates documentation for your code using documentation comments (written in Markdown). This documentation is then sent to docs.rs upon publishing to Cargo. Moreover, examples in documentation are automatically tested for you, eliminating untested documentation examples.

  • Rust-Analyzer

Rust Analyzer is like an intelligent IDE. It clearly labels what’s wrong with your code, explains why it’s wrong, points out the exact characters causing errors, and often provides an “auto-fix” function that rectifies errors automatically.

  • The Rust Book & Docs

Rust offers a comprehensive book called The Book, which covers everything you need to know about Rust. Neatly divided into chapters, it’s easily searchable and available for free. Additionally, due to Rust’s documentation comments, most libraries you use will have extensive documentation online.

With these tools at your disposal, compiling a Rust program and encountering bugs is incredibly rare. The tooling and language usually catch issues long before you hit the compile button.

Conclusion

If you are seeking exceptional speed, memory safety, and enhanced productivity, Rust is the language you’ve been looking for.

As Pentesters, part of our job is to provide solutions to developers. While suggesting a low-level language like Rust to Python developers might seem unconventional initially, Rust offers robust support, even allowing calls from functions written in other languages through foreign function interfacing.

We can leverage Rust to rewrite security or performance-critical code that seamlessly integrates with our existing codebase.

Here’s an example of calling C code:

extern "C" {
    fn abs(input: i32) -> i32;
}

fn main() {
    unsafe {
        println!("C believes that the absolute value of -3 is: {}", abs(-3));
    }
}

What is Unpatched softwares or systems & How To Defend Against It

What is Unpatched softwares or systems?

Sometime companies use the old versions of the softwares that have multiple exploits that are already written and are easily available on the web (usually they use that vulnerable version of the softwares because updating it might cause problems with the other softwares depending on it in the environment).

How to defend against the Unpatched softwares or systems?

  • Implement a patch management process.
  • Remove unnecessary features and dependencies.
  • Continuously monitor sources like CVEs for vulnerabilities in the systems.
  • Subscribe to email alerts for security vulnerabilities related to components you use.
  • Just use secured links to get products through official sources. To reduce the risk of a changed, malicious element being included, prefer signed packages.
  • Monitor for libraries and components that are unmaintained.
  • For the lifetime of the application, the company must insure that there is an ongoing process for monitoring, triaging, and implementing updates or configuration changes.

 

What is Cookie Stealing & How To defend against It

What is Cookie Stealing?

Cookies are small bits of data on how you respond and interact with a website. Cookie Stealing is exploitation of a valid computer session to gain unauthorized access to the Web Server.

The most common ways to compromise a session token are:

  • Predictable session token.
  • Session Sniffing.
  • Client-side attacks.
  • Man-in-the-middle attack.

How to defend against Cookie Stealing?

  • Use SSL certificate (HTTPS protocol).
  • keep your web-app up to date.
  • Use strong usernames and passwords.
  • Use MFA.
  • Block PHP execution.
  • Use Anti-Virus.
  • Do not click on suspicious links.
  • Avoid storing sensitive data.
  • don’t use predictable cookies.

 

What Is A Phishing Attack & How To Defend Against It

What is Phishing?

Phishing is when a attacker convinces you to be someone that they are not and ask for you personal information. They can more easily infect you with malware or steal your credit card details by impersonating someone you trust.

Example Scenario:

You receive an email from the bank containing a bank URL to goto
You click on the URL and the page opens
You sign in the bank account
The page loads again and you go to a random page related to the bank

In the back end when you sign in the creds are forwarded to the attacker in clear text and then the attacker redirects you to the actual bank website.

How to defend against the Broken Access Control?

  • Staff training.
  • Never trust anyone and do verify before giving out any data.
  • Dont visit random links.
  • Dont open unknown attachments.
  • Implement technologies that scans the attachments or checks the links (such as safe links and safe attachments in MS Azure).
  • Report to relevant person if you have clicked on the suspicious link so that the security team can verify and then proceed with their troubleshooting if necessary.
  • Use MFA.

 

What is Insufficient Logging & Monitoring & How To Improve It

What is Insufficient Logging & Monitoring?

Logging is essential because it enables the attacker’s actions to be tracked in the event of an incident. Their risk and effect can be calculated once their activities are traced. There would be no way to say what activities an intruder took if they gained access to specific web applications without logging. Since these logs contain confidential data, it is important to make sure that they are stored safely and that several copies of these logs are kept in separate locations. Even though logging is essential but it is helpful after a breach not before, or while a breach. to defend our self in the first place we need to ensure that we have Monitoring and Detection systems in place to catch and alert the teams (if needed or else the play books can be automated) when the suspicious activity is detected.

The information should be stored in the logs:

  • Time stamps.
  • User accounts.
  • API endpoints/page locations.
  • IP addresses.
  • Requests made.
  • Responses sent.

Common examples of suspicious activity includes:

  • Multiple unauthorized attempts for a particular action.
  • Requests from anomalous IP addresses or locations.
  • Use of automated tools.
  • Common payloads attempts.

How to Improve Logging & Monitoring?

  • Ensure all login, access control failures, and server-side input validation failures can be logged.
  • Ensure that logs are generated in a format that can be easily consumed by a centralized log management solutions.
  • Ensure high-value transactions have an audit trail with integrity controls to prevent tampering or deletion, (such as append-only database tables).
  • Establish effective monitoring, detecting and alerting mechanism.
  • Establish or adopt an incident response and recovery plan.
Examining the logs after a pen-test is one technique for deciding whether you have enough monitoring. The actions of the testers should be clearly documented in order to determine the extent of any harm they may have caused. 

 

What is Man-In-The-Middle (MITM) Attack & How To defend against It

What is MITM?

A MITM attack is when an attacker intercepts communications between two parties either to secretly go through or modify data going from one end to another. Attackers might use MITM attacks to steal login credentials or personal information.

Types Of MITM Attacks:

  • Rogue Access Point.
  • ARP Spoofing.
  • DNS Spoofing.
  • Multicast DNS Spoofing.

Common MITM Techniques:

  • Packet Sniffing.
  • Packet Injection.
  • Cookie Stealing.
  • SSL Stripping.

How to defend against MITM?

  • Use strong encryption.
  • Strong router login creds.
  • Use VPNs.
  • Force HTTPS protocol over HTTP.
  • Public Key Pair Based Authentication.

 

What is a Remote Access Trojan (RAT) & How To defend against It

What is RAT?

A RAT is a form of malware that lets attackers track and control your machine remotely.

How to defend against RAT?

  • Use anti virus.
  • Download softwares using safe and official links over a secure protocol. Prefer to download a signed image of the software to make sure there is no changes made in the software while in transit.
  • Dont open unknown email attachments & links.
  • Keep your browser and operating system up-to-date with security patches.

 

What is Insider Threat & How To defend against It

What is Insider Threat?

Employees, former employees, contractors, or business associates who have legitimate access to your systems and data but can use that access to kill or steal your data or systems are known as insider threats. Insiders may turn malicious for a variety of reasons, such as revenge, manipulation, ideology, ego, or monetary benefit via intellectual property theft.

How do I prevent a Insider Threat?

There are a variety of ways to defend yourself from malicious insiders, depending on the organization, systems, culture, environment, and how well this information is communicated and understood by employees.

 Technical Controls:

  • Control removable storage
  • Control outbound emails and files
  • Backups
  • Require strong passwords and multi-factor authentication
  • Recycle your old hardware and documentation properly (Remove all data before recycling)

 Access Controls:

  • Implement concept of least-privileged access
  • Use unique logons
  • Deactivate unnecessary access
  • Implement Auditing and logging
  • Establish physical security in the work environment
  • Enforce separation of duties

 Business Processes:

  • Do a comprehensive background check before hiring any IT admins because they have powerfull administrative access
  • Staff training
  • Improve work culture
  • Enable surveillance

What is a Ransomware & How to Defend Against It

What is a Ransomware?

Ransomware is a form of malware that encrypts a victim’s data. The attacker then asks for ransom. Once the ransom is paid the the user access to data is restored..

How to defend against Ransomware?

  • Keep your operating system patched and up-to-date.
  • If you don’t know what you’re doing, don’t install software or grant it administrative rights.
  • Use antivirus software.
  • Back up your files, regularly and automatically. Even though this will not prevent you from an attack, it will significantly reduce the harm it does.

What is Cross-Site Scripting (XSS) & How to Defend Against It

What is XSS?

XSS is a type of injection which if successful, allows an attacker to run scripts on the victim’s machine. A web-app is vulnerable, if it uses unsanitized user input.

There are three main XSS types:

  • Stored XSS: This is the most dangerous type of XSS. This is where a malicious string originates from the website’s database.
  • Reflected XSS: This payload is part of the victims request to the website. The website includes this payload in response back to the user.
  • DOM-Based XSS: DOM (Document Object Model) is a programming interface for HTML and XML documents. It represents the page so that programs can change the document structure, style and content.

How to defend against the Broken Access Control?

Using frameworks that automatically escape XSS by design.
Escape mistrusted HTTP request data.
Apply context-sensitive encoding when modifying the browser document on the client side.
Enable a CSP (Content Security Policy).