Skip to content

Commit

Permalink
Merge pull request #47 from syreal17/master
Browse files Browse the repository at this point in the history
Add Jeffery John's contributions / Add authorship by chapter
  • Loading branch information
Luke Jones authored Dec 24, 2023
2 parents aa02f30 + ea179a1 commit 9db84bc
Show file tree
Hide file tree
Showing 19 changed files with 540 additions and 4 deletions.
9 changes: 5 additions & 4 deletions book.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
:pygments-style: emacs
:icons: font
= The CTF Primer
:author: Samuel Sabogal Pardo and Luke Jones
:author: Samuel Sabogal Pardo, et al.
:sectnums:
include::chapters/intro.adoc[]
include::chapters/shell.adoc[]
Expand All @@ -18,6 +18,7 @@ include::chapters/sql.adoc[]
include::chapters/c.adoc[]
include::chapters/binary.adoc[]
include::chapters/assembly.adoc[]



include::chapters/careers.adoc[]
include::chapters/environment.adoc[]
include::chapters/git.adoc[]
include::chapters/tools.adoc[]
5 changes: 5 additions & 0 deletions chapters/assembly.adoc
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@


== Assembly
[discrete]
===== Samuel Sabogal Pardo

{empty}

'''


We previously saw in binary exploitation how some registers work and how the memory of a program is allocated. Once you get some idea of how to do basic binary exploits, to enter in a more advance level it is useful to understand the assembly in more detail. There are several assembly languages and they are exclusive to the processor architecture of a computer. Processor architectures have specific instructions. For example, an Intel processor can execute different instruction than an ARM processor, hence, the assembly language for ARM is different than the one for Intel. To begin, we will be using Intel assembly just for the fact that Intel architecture is widely used. The webshell, and your computer probably, have an Intel architecture. Note that the AMD processors have the same architecture and instruction set as Intel. Smartphones, in contrast to most laptops or desktops computers, generally have an ARM processor.
Expand Down
6 changes: 6 additions & 0 deletions chapters/binary.adoc
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@

== Binary Exploitation
[discrete]
===== Samuel Sabogal Pardo

{empty}

'''

Get ready for binary exploitation. We use C to explain binary exploitation because it is a language very prone to have vulnerabilities, however, other languages have similar vulnerabilities.

Expand Down
7 changes: 7 additions & 0 deletions chapters/c.adoc
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@

== A little about C language
[discrete]
===== Samuel Sabogal Pardo

{empty}

'''


We could say that C is one of the oldest programming languages that is still widely used in industry. It was developed in 1972 by the famous Dennis Ritchie, and even after all these years, is in fact one of the most used languages. This is the case because it is very efficient and we can control very directly the resources of the machine, in contrast to other languages, such as python. However, it is a more difficult language to learn to use it correctly, and it is much more prone to errors and vulnerabilities. Even experienced programmers that have written a lot of C in their lives can make a little mistake and introduce a bad vulnerability in a program that a hacker can exploit to take complete control of the machine in which the program is running.

Expand Down
67 changes: 67 additions & 0 deletions chapters/careers.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
[appendix]
== Careers
[[careers]]
[discrete]
===== Jeffery John

{empty}

'''


With all this effort learning cyber skills, you might be wondering how to use and practice them. There are many different career paths in cybersecurity, and they all require different skills. Some of the most common careers in cybersecurity are as analysts, engineers, and penetration testers.

Organizations need people who can analyze data and find patterns, people who can design and build systems, and people who can test those systems for vulnerabilities. One approach is with 'red' and 'blue' teams. Red teams are offensive, and they try to break into systems. Blue teams are defensive, and they try to protect systems from attacks. Both teams are important, and they work together to make sure that systems are secure.

It's also possible to pursue a career more independently, as a consultant or freelancer. This can be a good option for people who want to work on their own schedule and have more control over their work.

The National Security Agency (NSA) also contributes to training through the RING program - Regions Investing in the Next Generation. Here's an interactive exercise from them: https://d2hie3dpn9wvbb.cloudfront.net/NSA+Ring+Project/index.html[https://d2hie3dpn9wvbb.cloudfront.net/NSA+Ring+Project/index.html, window="_blank"]

=== Bug Bounties
[[bounties]]

One way vulnerabilities are reduced is through bug bounty programs, in which organizations offer rewards to their employees or the public for finding vulnerabilities and reporting them to be fixed.

This is beneficial to the organization because it allows them to find and fix vulnerabilities before they are exploited by malicious actors. Many companies have bug bounty programs, and many people are safer because of the security flaws that have been found and fixed through them.

Bug bounty programs are also beneficial to hackers as they can earn money legitimately while practicing their skills and helping others be more secure.

Some bug bounty programs include:

- HackerOne: https://hackerone.com/bug-bounty-programs[https://hackerone.com/bug-bounty-programs, window="_blank"]

- Bugcrowd: https://www.bugcrowd.com/programs/[https://www.bugcrowd.com/programs/, window="_blank"]

- Mozilla: https://www.mozilla.org/en-US/security/bug-bounty/[https://www.mozilla.org/en-US/security/bug-bounty/, window="_blank"]

Even governments offer bounties!

[.text-center]
.NCSC-NL (National Cyber Security Centre – Netherlands) t-shirt reward, https://jacobriggs.io/blog/posts/i-hacked-the-dutch-government-and-all-i-got-was-this-t-shirt-24.html[Jacob Riggs, window="_blank"]
image::images/careers1.png[]


=== The CVE® Program
[[cves]]

When a vulnerability is found, it is assigned a CVE number, which is a unique identifier for that vulnerability. CVE stands for Common Vulnerabilities and Exposures, and it is a list of publicly known cybersecurity vulnerabilities. CVEs are assigned by the CVE Numbering Authority (CNA).

By defining and cataloging vulnerabilities, security researchers, engineers, and analysts can more easily communicate about them to each other. Imagine trying to fix a problem without knowing what to call it!

The list of CVEs, and forms to submit or update them, can be found at https://www.cve.org[https://www.cve.org, window="_blank"].


=== Ethical Considerations
[[ethical-considerations]]

Before publishing a vulnerability from a bug bounty program, or as a CVE, you should consider the ethical implications of doing so.

If a vulnerability is published before it is fixed, it could be exploited by malicious actors. This could cause harm to people or organizations, as well as legal consequences for the publisher. Each organization or program will have its own rules and preferences for how to responsibly disclose vulnerabilities.

Additionally, never hack into a system without permission, or attempt to go further than requested. This is illegal, and it could similarly cause harm to people or organizations. Bug bounty programs will define clear scopes for what is allowed.

If the organization does not respond to a disclosure of a security risk to them or their users within a reasonable timeframe, there may be other options such as contacting a governing agency. In the United States, the Cybersecurity and Infrastructure Security Agency (CISA) is a good place to start: https://www.cisa.gov/coordinated-vulnerability-disclosure-process[https://www.cisa.gov/coordinated-vulnerability-disclosure-process, window="_blank"].

If a malicous actor is able to find and exploit an unreported vulnerability, it is known as a 'zero-day', because the organization has had zero days to fix it. These are considered the most dangerous, and can impact millions of innocent people. Ultimately, careers in cybersecurity are all about preventing these from hapening.

While this Primer cannot cover all the ethical considerations of reporting individual vulnerabilities, it is important to consider your ability to help others through responsible disclosure.
6 changes: 6 additions & 0 deletions chapters/crypto.adoc
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@

== Cryptography
[discrete]
===== Samuel Sabogal Pardo

{empty}

'''

Cryptography is an ancient field that dates to Ancient Rome. Etymologically, the word traces back to the Greek roots "kryptos" meaning "hidden" and "graphein" meaning "to write." It is used to communicate secretly in the presence of an enemy. With cryptography we can achieve the following properties when a message is sent:

Expand Down
74 changes: 74 additions & 0 deletions chapters/environment.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
[appendix]
== Virtual Environment
[[environments]]
[discrete]
===== Jeffery John

{empty}

'''

We mentioned Linux in our chapter on xref:book.adoc#_the_shell[the Shell], and you may be wondering what your next step is. The great thing about Linux is that it's hard to outgrow!

Linux is a family of open source systems, which are distributed as 'distros', and each has strengths and weaknesses. The advantage of Linux is that the user has the power to control their own device, and freely choose between distros.

Most of the world's super computers, servers, mobile devices, and embedded systems run a distro of Linux. Even the International Space Station runs Linux!

When developers and hackers choose their tools, xref:book.adoc#_tools[including many mentioned in this Primer], they have to consider how their hardware and software will interact. This is known as their 'environment'.

=== Web

Many hacking tools are web-based, and so they'll work on any operating system that allows you to run a web browser. A good example is https://crackstation.net[CrackStation, window="_blank"] which allows anyone with an internet connection to check password hashes.

Another option is to use a remote server, which is a computer that you can access over the internet. Typically, you'd own or rent this server, so you'd have more control over how it's used. This is a great way to run tools that require a lot of processing power, or to run tools that you don't want to run on your own computer due to space or computing power limitations. Remote servers are often called and offered by 'cloud' services, and they're a great way to get started with hacking!

Note that web-based tools are often hosted on their own remote servers that they use as a 'backend' to process inputs and requests from the 'frontend', or the website that you can interact with. Having a remote server, like an instance of Amazon Web Services, Google Cloud Platform, or Azure, is unique in that you can choose the tools that are installed, the capability of the server, and how accessible to the public it is.

=== Virtual Machines

Virtual machines (VM) are a great way to run tools that require a specific operating system, or to run multiple operating systems at once. These can be run locally, or on a remote server.

You might sometimes hear VMs referred to as a 'box' because anything inside of one tends to stay inside. You can treat a VM as if it were a separate computer - even if it's sharing hardware locally or with your remote server!

For example, if you use a Windows computer, you can run a virtual machine with a distro of Linux to run Linux tools. You can also configure your virtual machine to be created in a certain way, and then reset or share that state with others! https://podman.io/[Podman, window="_blank"] is an excellent option for this, and helps teams have effectively identical environments so collaboration is easy. Since hacking can sometimes be very dependent on the version of a target's hardware or software, being able to practice on an exact copy is helpful. For the same reason, this is why downloading security updates for your software is a good idea! Cyber teams around the world work to 'patch' problems and publish fixes as quickly as they can.

Additionally, if you're investigating potential malware, it's a good idea to run it in a virtual machine to help protect your computer. Since the VM acts like an independent computer, most malware will be contained inside it. If you run into any issues, you can simply reset the virtual machine to a previous state.

To get started, you might be interested in https://www.virtualbox.org[VirtualBox, window="_blank"], which alows for software virtualization to whatever your other tools or use cases need.


=== VPNs

When accessing a remote server, you may need a Virtual Private Network, or VPN, to connect to it. This is a way to securely connect, as well as protect your privacy.

In this arrangement, your data will be encrypted and sent to the VPN provider, who will then send it to a remote server, such as a website. If a third party intercepts your data, they won't be able to read it, and if they're listening to your traffic, all they'll see is the connection to the VPN, rather than where you go next. Pretty handy!

In industry, companies often require their employees to use a company VPN to access their internal network from outside the office. Just like how VPNs can protect an individual's data, they can protect a company's sensitive information too! Without a VPN, employees working remotely may be vulnerable to their credentials being stolen.

If you choose to use a VPN, it's important to understand that you're trusting the VPN provider with your data. If you're working on a sensitive project, you may want to vet the VPN provider to ensure that they're trustworthy.

=== Authentication

Hackers need to worry about their own security too! When using virtual services, along with a VPN, use strong passwords and multi-factor authentication whenever possible. That way, even if an adversary were to steal your password from one service, they would need others in order to impersonate you.

If you pursue cybersecurity as a career, many people may be trusting you with their data. You should take this responsibility seriously, and protect your own accounts to avoid putting others at risk.

Best practices change often, but current recommendations include using a password manager, and including a hardware token for authentication. When creating a password, consider using a passphrase instead, as these are generally easier to remember and harder to crack.

[.text-center]
.Password Strength, https://xkcd.com/936[xkcd.com, window="_blank"]
image::images/environment1.png[]

=== IDEs

IDEs, or Integrated Development Environments, are tools that help developers write code. They often include features like syntax highlighting, code completion, and debugging.

https://code.visualstudio.com/[Visual Studio Code, window="_blank"] is a popular IDE that's available for Windows, Mac, and Linux. Due to it being open source, many developers are able to contribute plugins to extend its functionality for specific languages or use cases.

An IDE can help hackers by making it easier to write code for scripts, read code from their targets, and by providing tools to help them understand what code is doing.

=== Installations

If you're interested in installing a distro of Linux on your computer or on a virtual machine, it's generally a good idea to start with a popular distro so that there are plenty of resources and people that may be able to help you.

A popular distro for beginners is https://ubuntu.com/[Ubuntu, window="_blank"], and another among hackers is https://www.kali.org/[Kali, window="_blank"]. If you don't want to install a distro, you can also use a live USB, which is a USB drive that you can boot from. This is a great way to try out a distro without installing it. Some, like https://tails.net[Tails, window="_blank"], are designed to use this feature to protect user privacy.
6 changes: 6 additions & 0 deletions chapters/forensics.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@
// Steganography

== Forensics
[discrete]
===== Luke Jones

{empty}

'''

=== What is Forensics?

Expand Down
Loading

0 comments on commit 9db84bc

Please sign in to comment.