We are currently doing our Sprint Challenge for Security and Theory of Computation in our coding school and part of our task is to discuss what the Threat Model is and talk about what concrete actions we can take to improve our online security.
For the first part, I wrote a fictional email to a co-worker.
What a Threat Model Is
Thank you so much for the warm welcome!
In your email yesterday, you asked me if I’m familiar with the concept of a Threat Model in the context of security. Yes, I am. If you will recall, we covered this topic in one of our lessons in Code School last year. Below is a brief explanation, as well as an example.
As far as I understand it, a Threat Model is basically a conceptual tool used for understanding and improving network security. A Threat Model has several aspects: attack surface (what technologies or systems they use that are potential “points-of-entry” for attacks), adversaries (persons who may be interested in attacking their security), attack vectors (means of attack or compromise), and mitigation (possible solutions or preventive measures to lesson the risk of attacks). These aspects or factors help us assess the strengths, weaknesses, and threats of any given situation, and provide us with possible solutions or measures to prevent breach in security.
To illustrate, here’s a hypothetical scenario:
Suppose we have a student named Mike who is studying web development and software engineering in Code School. He is an absolute newbie when it comes to technology and programming and he’s not very careful when it comes to security. He often shares his laptop with his room mates and leaves his phone lying about in his dorm. He seldom logs out of his Gmail, Slack, Zoom, and GitHub accounts. He also is a bit naive when it comes to passwords: he only has one for all his accounts and applications. He decided on Mike123 since it’s very easy to remember.
One day, he received the shock of his life: Code School kicked him out of the program. Among the many complaints laid against him were these: He allegedly sent malicious DMs to several of his classmates in Slack; he corrupted several repos in GitHub; he sent malwares to the school’s CEO; and he shared Zoom links that were actually pranks. He insisted that he did not do any of these.
The Threat Model of the story looks like this:
Attack surface — Mike shares a room with several people. One or more of them may have a motive to harm him or his reputation. For instance, one of them may be a student of a rival coding school. His uses the usual technological tools for a coding student — laptop, Slack, Zoom, etc., and he doesn’t log out of them, which makes it super easy for hackers to hack them.
Adversaries — As mentioned, a friend or acquaintance may be a student from a rival coding bootcamp, or maybe somebody simply has a beef with him, etc.
Attack vectors — Mike was very easy to compromise. His applications were usually open, and those that were not had very unsecure passwords.
Mitigation — The means for securing Mike’s security are obvious: Always sign out of all your apps and accounts, create a unique password for every account and use a password manager, utilize two-factor authentications, use encryptions, use SSH for GitHub, etc.
If Mike did the above measures, he wouldn’t have been falsely accused of those actions, and he would still have been a Code School student.
Just my two cents. I look forward to working with the team!
How I Improved My Security Online
For the second part of our task, we were to take concrete steps to improve our online security, so these are a few of the things I did:
- I decided to sign up to a password manager. I chose Dashlane since it’s free, but I’m also considering LastPass.
- I made use of a Secure Socket Shell (SSH ) to connect to my GitHub by generating a SSH key and adding it to my SSH agent. I downloaded GitHub Desktop.
- I used a “passphrase” as opposed to a mere “password” or “passcode”. My passphrase is exactly that — a very long phrase or sentence that is not likely to be hacked by anyone who doesn’t possess mind-reading powers.
It only took me less than an hour to implement the above measures and what a difference it makes! They sound trivial but they just increased my security tenfold.
You can do it, too. Here are some resources you can make use of right now (I borrowed them from our Sprint Challenge material, with permission from my Project Manager):
- KeePass — open-source password manager
- Alternatives to KeePass — cloud, desktop, etc., consider your personal security/convenience tradeoff
- Two Factor Auth — list of services that support 2 factor authentication
- Connecting to GitHub with SSH — more convenient (for command line) and secure than passwords
- Adding GPG to your GitHub account — simple GPG setup that will let you sign commits
- Creating the perfect GPG keypair — more complicated, for those who want finer control
- Keybase — a way to share/certify public keys (also offers encrypted chat, file storage, etc.)
- Yubico — affordable hardware security devices for two-factor/crypto
- How to install Ubuntu in VirtualBox — usable secure popular distribution of Linux
- Kali Linux — security-specific (penetration testing) distribution of Linux, includes VM images for download
- Information about Sandboxes — general starting point for learning about sandboxes to contain an application
Improving our security online is very easy and necessary. We don’t have any reason not to do it, and every reason why we should.