Code Signing Store Mon, 25 Sep 2023 09:52:40 +0000 en-US hourly 1 https://wordpress.org/?v=6.7.2 https://dev.codesigningstore.com/wp-content/uploads/2023/03/cropped-favicon-ic-100x100.png Code Signing Store 32 32 How to Set Up Your New Code Signing Hardware Token (A Step-by-Step Guide) https://dev.codesigningstore.com/how-to-set-up-code-signing-hardware-token Thu, 31 Aug 2023 06:58:49 +0000 https://codesigningstore.com/?p=437834 The industry’s security standards body now requires all code signing certificate private keys to be stored on secure hardware. This comprehensive guide walks through the process of setting up your secure USB token. We recently shared that the industry’s standards body (i.e., the CA/B Forum) updated its Code Signing Certificate Baseline Requirements. As of June… Continue reading How to Set Up Your New Code Signing Hardware Token (A Step-by-Step Guide)

The post How to Set Up Your New Code Signing Hardware Token (A Step-by-Step Guide) appeared first on Code Signing Store.

]]>
The industry’s security standards body now requires all code signing certificate private keys to be stored on secure hardware. This comprehensive guide walks through the process of setting up your secure USB token.

We recently shared that the industry’s standards body (i.e., the CA/B Forum) updated its Code Signing Certificate Baseline Requirements. As of June 1, 2023, all publicly trusted code signing certificates’ keys must be stored on cryptographically secure hardware (USB tokens, hardware security modules [HSMs], etc.).

The goal here is to help organizations better secure their code signing certificates and keys against cybercriminals. Of course, certificate authorities (CAs) approach this secure key storage requirement differently by having different code signing certificate provisioning requirements:

  • Some CAs (Sectigo and Comodo) choose to send pre-configured USB tokens (i.e., tokens that have the certificate and keys imported already).
  • Other CAs (DigiCert and GoGetSSL) send a blank USB token so you can carry out the keygen and certificate import process yourself for greater security.

Knowing this, we’ve put together a step-by-step guide on how to set up a new DigiCert code signing certificate USB token from CodeSigningStore.com. We’ll assume you’ve already purchased a code signing certificate and have your blank USB token in hand. Now, you can follow along with this guide to ensure you properly set up your new secure token.

Step One: Access Your Account Details

Go to your Orders page and access the order for your new code signing certificate. There, you’ll find a button that’ll allow you to start the process of setting up your USB token. This will take you to a separate website (CertificateGeneration.com), where you’ll go through the set-up wizard.

This first step involves confirming that you’ve received your secure token. Hit Next to continue, as shown below.

usb token setup

Step Two: Download the Authentication and Hardware Installer Tools

Before you can set up or use the code signing certificate, you first must download and install two specific tools that will allow you to set up your secure hardware token. Click on the first link (Download SafeNet Authentication Client) and you’ll be taken to another website.

How to Install the Authentication Client

download applications

Select the version of the SafeNet Authentication Client software you want to install. In this example, we’ve selected the latest version of the 64-bit Windows client.

download safenet authentication client

This will open the SafeNet Authentication Client Setup Wizard.

safenet authentication client setup

In the next three screens, you’ll want to:

  • Select your language,
  • Accept the license agreement, and
  • Select the file path where you want to install the software. If you go with the default location, it’ll save it to C:\Programs\SafeNet\Authentication:
choose the destination folder

In most cases, you’ll want to select the Typical option, as shown below.

select type as typical

Now, it’s time to Install the client.

ready to install

Once complete, hit the Finish button.

setup finished successfully

How to Install the DigiCert Certificate Hardware Installer Tool

Return to the Download Applications tab of the CertificateGeneration.com screen. Here, you’ll next select the Download DigiCert Certificate Hardware Installer.

download applications

Once the .zip file download is complete, go to the folder where you’ve saved it.(It should be labeled something akin to DHCI-x64-signed.) Open the folder and double-click on the installer application inside. 

digicert hardware software installer
dhci x64 signed

A pop-up will ask you to extract all of the compressed files. Hit Extract All and choose the folder where you want those files to go.

compressed zipped folders

After that’s finished, open the folder and double-click on the application inside.

select destination to extract zippled folders

Double-click the application. This will bring up a new installer wizard window.

dhci x64 extracted

This installer wizard is what you’ll see when you install an extended validation (EV) code signing certificate. However, this process is the same for standard code signing certificates as well. Hit Next to continue.

digicert hardware software installer dev mode

Accept the license agreement terms and hit Next again to continue.

accept terms digicert hardware software installer

This next screen will prompt you to provide an Initialization Code. You’ll be able to find this code by switching back to the CertificateGeneration.com screen, checking the box labeled I’m ready to install my certificate, and hitting Next. (The initialization code will be found two screens from now.)

enable option ready to install certificate

Step Three: Set Up the Token’s Password and Install Your Certificate and Key

To start the process of installing your certificate, you’ll need to follow some additional steps (shown below). These steps include plugging in your USB token to your computer and then retrieving the Initialization Code by pressing the green Retrieve Initialization Code button (as shown below).

NOTE: You’ll only be able to display it once; be sure to copy-paste it into a Notepad doc or somewhere else you can access it later, if needed.

install certificate option

Navigate back to the DigiCert Hardware Certificate Installer window (shown below). Here, you’ll be prompted to paste the provided initialization code. Hit Next to continue.

initialization code window

Set Up Your Token’s Password

Now, you should see a message stating that your USB token has been located (as shown below). If you’re setting up the token for the first time, you’ll need to check the box labeled “Re-initialize my token and permanently delete any existing certificates and keys.” This will take you to a screen where you can set up a username and password to protect the hardware token from unauthorized use.

token detection window

Be sure to write down your password and store it securely. (Do not use sticky notes or leave this information out in the open!) You’ll need this password in combination with your USB token to digitally sign software and code.

NOTE: You’ll also use this option if you need to delete and re-issue your current code signing certificate and key pair due to a security issue or certificate mis-issuance.

If your private key gets compromised, then whoever has access to it can use it to sign malware in your name. Surely, you can imagine how bad things will be if this were to happen…

But let’s not focus on that at the moment. Hit Next to continue setting up your token.

Generate Your Private Signing Key

Here, you’ll want to choose the type of signing key you want to generate. In this case, we’ll choose an ECC (elliptic curve cryptography) key with the key size P-384. Hit Next to move on to the last step.  

key information window

Import Your Code Signing Certificate onto the USB Secure Hardware Token

This will initiate the certificate installation process. The good news is that this step is relatively quick; less time than it takes to pour yourself a cup of coffee.

Once the process is complete, you should see a message at the bottom of the screen stating that the process has been completed successfully. Go this point, you can press Close to exit the screen.

certificate installation window

Return to the CertificateGeneration.com window. Here, you’ll click the box for “I installed the certificate successfully & saved my password” and hit the green FINISH button.

usb token setup process completed

That’s it! You’ve now set up your secure USB token, generated your key, and imported your code signing certificate onto the device. It’s now ready for use to sign your software, codes, and other executables.

Save up to 21% on a Java Code Signing Certificate

Digitally Sign an Unlimited Number of JAR files and Applications for as little as $211.46/year.

Save up to 21% on a Java Code Signing Certificate

Digitally Sign an Unlimited Number of JAR files and Applications for as little as $211.46/year.

Save up to 21% on a Java Code Signing Certificate

Digitally Sign an Unlimited Number of JAR files and Applications for as little as $211.46/year.

The post How to Set Up Your New Code Signing Hardware Token (A Step-by-Step Guide) appeared first on Code Signing Store.

]]>
What to Know When Purchasing Your Next Code Signing Certificate https://dev.codesigningstore.com/what-to-know-when-purchasing-your-next-code-signing-certificate Mon, 28 Aug 2023 11:40:47 +0000 https://codesigningstore.com/?p=437795 To protect signing keys against theft and misuse, the industry rolled out new security requirements for code signing certificates. Here’s what to know about these changes and what they mean to you as a developer or publisher when purchasing a certificate. An Overview of the Changes Effective June 1, 2023, the industry’s standards body issued… Continue reading What to Know When Purchasing Your Next Code Signing Certificate

The post What to Know When Purchasing Your Next Code Signing Certificate appeared first on Code Signing Store.

]]>
To protect signing keys against theft and misuse, the industry rolled out new security requirements for code signing certificates. Here’s what to know about these changes and what they mean to you as a developer or publisher when purchasing a certificate.

An Overview of the Changes

Effective June 1, 2023, the industry’s standards body issued new security code signing baseline requirements for individual and standard validation certificates. All certificates must be issued on secure hardware (such as a token or hardware security module [HSM]) that’s compliant with FIPS 140 Level 2, Common Criteria EAL 4+, or equivalent. The goal is to secure your cryptographic keys from bad guys and prevent compromise using secure hardware.

The specifics of how the provisioning method works vary depending on which certificate authority (CA) you choose to issue your certificate. For example, either the CA will generate the certificate signing request (CSR) and private key for you, or you’ll have to generate the key pair yourself, which must be stored on a secure, approved device.

What These Changes Mean to You

If you already have a valid code signing certificate, then there’s nothing for you to do. You’re set for the life of your certificate (or until you have to renew or reissue it).

These changes impact users who purchase a new code signing certificate or re-issue an existing certificate after June 1. In this case, you must store the certificate and its private key on a supported secure device.

How to Get Your Code Signing Certificate (Provisioning Methods Listed By CA)

There are differences between different brands’ code signing certificates regarding their certificate provisioning methods and processes. You’ll want to keep these differences in mind when choosing a certificate.

DigiCert Code Signing Certificates 

DigiCert offers multiple code signing certificate provisioning options to meet your needs:

logo digicert
  1. Receive a blank hardware token in the mail to store your certificate and keys (default),
  2. Use an existing compliant token you own, or
  3. Store your certificate on an approved HSM.

DigiCert ranks among the industry’s fastest CAs when it comes to certificate issuance. Their standard code signing certificates typically take 1-4 days to issue.

Sectigo Code Signing Certificates

Choose between Sectigo’s two provisioning methods to receive your certificate and private key:

logo-sectigo
  1. Get a pre-configured hardware token in the mail containing your certificate and keys (default), or
  2. Receive a downloadable certificate you can manually store on an approved HSM.

NOTE: To use an HSM, you’ll need to use a supported HSM that can provide key attestation. Currently, Sectigo supports Thales/SafeNet Luna and netHSM devices, and Yubico FIPS Yubikeys (for ECC keys only).

Sectigo-brand code signing certificates typically take 4-8 days to issue.

Comodo Code Signing Certificates

As a Sectigo product, Comodo code signing certificates also offer two options when it comes to provisioning:

logo comodo
  1. Get a pre-configured hardware token in the mail containing your certificate and keys (default), or
  2. Receive a downloadable certificate you can manually store on an approved HSM.  

Comodo code signing certificates are typically issued within 4 to 8 days.

GoGetSSL Code Signing Certificates

GoGetSSL code signing certificates are great for publishers on a budget. Their certificates have multiple provisioning options to meet your needs:

ggssl-cds-logo
  1. Receive a blank hardware token in the mail to store your certificate and keys (default),
  2. Store it on an existing compliant token you own, or
  3. Store your certificate on an approved HSM.

GoGetSSL standard code signing certificates typically take 1-4 days to issue.

Next Steps to Start Securely Signing Your Code and Software

Once you purchase your certificate, you’ll undergo the CA’s validation process. This may take a few days. Once validated, you’ll receive your certificate via your chosen delivery method. Then you’ll need to install the token’s client software onto your computer and activate the token. (You’ll receive directions in the mail along with your token.)

If you selected the default method as your delivery method for a DigiCert code signing certificate, you may have additional steps to set up your token. Don’t worry; there’s an installation wizard that will walk you through the process.

To learn more about the new process for getting a code signing certificate, check out CodeSigningStore.com’s Support page and FAQs.

Store Your Certificate and Keys in the Cloud with DigiCert Software Trust Manager

Don’t want to manage a bunch of individual USB tokens or purchase an expensive HSM? Then don’t. DigiCert’s Software Trust Manager enables you to digitally store and use your code signing keys securely in a cloud-based HSM.

DigiCert Software Trust Manager also allows you to do many other things, including:

  • Assign permissions to authorized developers without them ever having direct access to your signing keys.
  • Automate flows using APIs or integrations.

Track how, when, and who uses your signing certificates via permanent signing logs.

Final Takeaways on These Code Signing Industry Changes

Change is inevitable. Although these changes may seem like a pain, when you consider the risks associated with insecure code signing keys, it makes sense why the industry’s standards body implemented such an important security requirement for signing certificates and keys.

We’ve seen several instances over the past year or so where the signing keys of major organizations became compromised — GitHub, NVIDIA, and Intel (via MSI’s data breach). Insecure signing keys can result in everything from unauthorized modifications to code and software to compromises of your supply chain. Don’t give cybercriminals a chance to ruin your good name; get a code signing certificate with secure key storage.

Our team at CodeSigningStore.com is here to help. Whether it’s answering your questions or guiding you through the process of getting or re-issuing a certificate, we’re here to ensure that your signing certificates and keys meet the industry’s latest security requirements.

The post What to Know When Purchasing Your Next Code Signing Certificate appeared first on Code Signing Store.

]]>
Are All .Exe Files Viruses or Malware? How to Check & Prove Yours Isn’t https://dev.codesigningstore.com/are-all-exe-files-viruses-or-malware Fri, 18 Aug 2023 10:29:15 +0000 https://codesigningstore.com/?p=437703 What do Sys.exe, AnyDesk.exe, and netscan.exe have in common? They were all exploited by cybercriminals to deploy BlackByte ransomware attacks. Explore whether all executables are viruses and discover an easy way to discern the good .exe files from bad ones For the second consecutive year, SonicWall’s 2023 Cyberthreat report lists .exe as the most common… Continue reading Are All .Exe Files Viruses or Malware? How to Check & Prove Yours Isn’t

The post Are All .Exe Files Viruses or Malware? How to Check & Prove Yours Isn’t appeared first on Code Signing Store.

]]>
What do Sys.exe, AnyDesk.exe, and netscan.exe have in common? They were all exploited by cybercriminals to deploy BlackByte ransomware attacks. Explore whether all executables are viruses and discover an easy way to discern the good .exe files from bad ones

For the second consecutive year, SonicWall’s 2023 Cyberthreat report lists .exe as the most common malicious file type. Executable files are so popular among cybercriminals that they’re constantly reported as the top Windows malware file type. This is largely why Microsoft Outlook blocks the sending and receiving of .exe files by default; in April 2023, the company also rolled out a similar block for One Note.

Wait. So, are all .exe files viruses or viruses then? Does this mean that developers and software vendors should stop creating .exe files? Spoiler alert: No, and no. Executables play critical roles in our digital world, so don’t give up on them just yet. In this article, you’ll discover how:

  • You (as a user) can check whether that weird .exe process running on your device (and draining your CPU) is safe.
  • You (as a developer or vendor) have a way to prove to your customers and users that your .exe files are safe.

Because even if threats are everywhere in the digital world, not all viruses or other types of malware are painted with the same brush.

Are All .Exe Files Viruses or Other Types of Malware?

As a security engineer, I had to teach newbie employees and students to analyze cyber threats and potentially harmful files and codes. Almost all of them, sooner or later, asked me the same question: “Are all .exe files viruses?”

Why? Because among all the malicious scripts and dodgy compiled programs we were analyzing, no matter if they were email attachments or downloadable executables, those with the .exe extension were the most common.

And today, things haven’t changed much. In Q1 2023, malware infections jumped by almost 40% year over year. Cybercriminals are getting creative by exploiting new tools like ChatGPT to generate new malware.

So, what was my answer to my students then? The same one I’m sharing with you today: “Not all executables are viruses. Just like there are bad and good people, there are also bad and good .exe files.”

For example, .exe files could be:

  • Legitimate programs running on your device. Think about Windows software installers often named something_setup.exe. Do you want to install Firefox or Chrome on your Windows device? You’ll be prompted to download a .exe file, too.
example of the exe file
Image caption: This is an example of the .exe file you’ll get when you download Firefox for Windows.
  • Malware. These are the bad .exe files you want to stay away from. If you compare them to people, they’re the criminals. Often disguised using legit-looking names, they lure victims by posing as genuine email attachments or downloadable software applications. When you look behind the masks, you’ll discover that they’re infected with viruses, worms, ransomware, and other types of malware.
  • Corrupt files. These are like confused people who might unintentionally cause harm. This type of .exe file isn’t as dangerous as the previous one. It’s genuine code that, due to accidental corruption, won’t work properly once installed.      

In short, the answer to the question “Are all .exe files viruses or malware” is “No, but many of them are.” Is there a way to check and prove that yours isn’t? You betcha! And this is what we’re going to explore next.

Users: How Do I Know Whether an .Exe File Is Legit and Safe to Install and Use?

Telling if a .exe file is safe to install and run isn’t complicated, but taking the time to determine this can help protect your devices against malware and attacks. At least, this is the case so long as you know how to do it and what to check. Is it difficult? Not at all. It’s sufficient to follow these three simple tips.  

1. Verify the Source of the .Exe File

Do you normally download .exe email attachments without thinking because they seem to come from a person/company you know and trust? Have you habitually gotten your software from dodgy websites or file-sharing sites to save money? Both of these are terrible ideas. Why?

Email addresses can be easily spoofed (i.e., doctored) to trick recipients into opening phishing emails or clicking on malicious attachments. Is it really so dangerous? Judge for yourself. In 2022, 66% of organizations surveyed by Mimecast were victims of at least one email-based ransomware attack that somewhat damaged their business.

Are shady websites and file-sharing sites better? Nope. They both are well-known sources of many types of malware. Therefore, the first rule is to click on or download .exe files from reputable sources only. 

Want to know how to recognize a spoofed email? Check out this short video to learn a few tricks:

2. Look Out for Your Operating System Warnings

Are you a Windows user? I’m sure you’ve seen the popup below at least once when you tried to install or run an executable:

Windows Protected PC
Image caption: The screenshot shows a Windows Unknown Publisher alert.

What is it? When you download and/or install software, Windows automatically checks whether the code has been digitally signed using a code signing certificate and looks for the publisher’s verified name. If the software hasn’t been signed, the screenshot above is an example of the warning that Windows Defender SmartScreen will show you.

What does it mean? The file could be dangerous as the operating system couldn’t verify its origin. The solution? Click Don’t run and exit the installer right away.

For those who would be tempted to go ahead with it anyway, all major browsers will also show a similar warning, like the example below from Firefox:

example of a Firefox security warning
Image caption: The screenshot shows an example of a Firefox security warning.

What if the .exe file has been signed? If the publisher used an extended validation (EV) code signing certificate, you won’t see a Windows SmartScreen Defender warning at all. Windows operating systems and Microsoft’s Edge browser will automatically trust the software.

Otherwise, if the code has been signed with an organization validation (OV) code signing certificate, Windows Defender SmartScreen and the User Account Control window will show you a pop-up displaying the publisher’s name.

verified publisher windows 10
Image caption: This is the information you get when a .exe file is signed with an OV code signing certificate.

In both cases, the origin of the file has been confirmed and it looks legit. So far. But, as it’s always better safe than sorry, there’s at least one last key tip you may want to follow before finally running or installing the file. Which one? This is what we’re going to discover next.

Before we move on, though, do you want to learn more about how to check the digital signatures of a file signed by a code signing certificate? Discover how to check them in a breeze by following a few simple steps.

3. Scan All .Exe Files Using an Antivirus Program

Hold on, can’t expired or stolen code signing certificates be used for fraudulent activities? Yes, in certain cases (e.g., when signing Windows drivers). It isn’t easy, but that’s what happened in 2022 when attackers stole two Nvidia code signing certificates and used them to sign malware.

Want to avoid falling into such traps? After checking the .exe file’s code signing certificate, scan the file with your antivirus software or an online scanning tool. VirusTotal, for example. It’s free, and you just have to upload the file to know the verdict. 

upload exe files viruses in virustotal
Image source: VirusTotal.com. Are all .exe files viruses? Upload them on VirusTotal to find out if they’re safe.

At the end of the day, the devil is always in the details. The more you check the authenticity and integrity of the files you download and install, the safer you are.

OK, all of that is good advice for users, but what if you’re a developer or a vendor?

Developers/Publishers: How Can I Prove My .Exe Files Are Secure?

Let’s say you are the manufacturer of luxury brand of watches. How do you prove to your potential buyers that the designer watches you’re selling are the real deal and not a copycat? By:

  • Adding to your product your unique label and trademark.
  • Including the watches’ serial numbers and certificates of authenticity to attest that the products are legitimate.
  • Knowing key qualities of the watches (design, weight, ticking sounds, backing design, etc.) to assess its integrity so you can feel confident they haven’t been replaced by counterfeits.
  • Selling the watches only in select shops that are licensed by you. 

Right. But what about digital items? If you’re a developer or software vendor, you don’t sell physical goods, and counterfeiting something in the digital world is dead easy. An attacker just needs to access the file, right?

So, how can you prove the authenticity and integrity of something intangible like software? With code signing. As a matter of fact, using a code signing certificate to digitally sign your .exe files prior to release or distribution will be your best bet to:

Prove That Your Codes Are Safe, Original, and Malware Free

In Q1 2023, Avast blocked a stunning 61 million suspicious files. So, if the answer to the question “Are all .exe files viruses or malware?” is no, what’s the magic behind a digitally signed code that can help you prove it to your potential customers and users?

To sign an .exe file with a code signing certificate, a developer:

  • Applies a secure hashing algorithm to the code to generate the hash digest (i.e., the hash value),
  • Uses their private key to encrypt the hash value,
  • Adds a time stamp (i.e., the exact time and date when the code has been signed), and finally
  • Appends the signature block including the digest, code signing certificate, and the hash function to the .exe.
how to sign exe file
Image caption: The graphic shows how to sign a .exe file.

Bibbidi-Bobbidi-Boo! The code is now signed. From now on, the signature will prove that the .exe is:

  • Original, and really made by you (i.e., authentic). Every time a user attempts to download the .exe file, your identity will be confirmed by the User Account Control or Windows Defender SmartScreen pop-up displaying your organization’s verified information (if you chose to use an OV certificate). Did you opt for an EV code signing certificate? Even better. The user will be able to immediately run the executable without any warning or annoying popup.
  • Safe and malware-free (i.e., your file’s integrity is intact). Has your .exe file been tampered with by a malicious third party or replaced with malware? When the customer downloads the software, their operating system will automatically check if the digest it generates matches the one provided in the digital signature. If it doesn’t, the customer will be alerted.

Protect Your Brand and Organization Against Malware-Based Attacks

In 2022, 66% of organizations were hit by ransomware. 84% of those in the private sector lost customers and revenue due to the attacks. Code signing doesn’t only protect your users; it also shields your organization from malware infections and data breaches.

How? Imagine that you’ve just published a new, unsigned software on your corporate website. As it isn’t protected by a digital code signing certificate, all a cybercriminal has to do is replace the legit file with a malware-infected one. Voila’.

Imagine that one of your employees downloads the malicious file and attempts to run it, assuming it’s safe. They double-click on the .exe icon and ignore the “Unknown Publisher” or and ”Windows has blocked this software because it can’t verify the publisher” warnings. Now, that device and the network it’s connected to are compromised. If an attacker chooses to, they can now move laterally through your network to find other vulnerabilities to exploit and systems to compromise.

Yup, people ignore warnings sometimes, and when they do, boom. The damage is done. And it could spread all over the organization like fire in the wind. The consequences? Locked files due to ransomware, a data breach exposing your customers’ sensitive data, and your reputation going down the drain. 

Code signing helps minimize the risk of your .exe files being tampered with or replaced. How? Remember when we briefly explained how code signing works earlier? To change your software, an attacker would need your unique private key and/or code signing certificate to resign it and apply a new hash. Otherwise, Windows Defender SmartScreen will notify a user that the file has been modified since it was signed.

Could a cybercriminal get their hands on your private key? Doing so is easier said than done; nevertheless, never say never. An attacker can get ahold of your code signing certificate’s private key if you don’t properly manage your certificate and key life cycle and securely store your key. Don’t despair, though. Ensure that your precious private key and certificates are stored and managed following a few unbeatable security tips and you’ll be good to go.

Protect Your .Exe Files During Development, Distribution, and Maintenance

Since 2020, software supply chain attacks have increased by an average of a walloping 742% year over year. “Everything’s not lost,” though, as the British band Coldplay sang. And they were right. According to the same report, 3.4 billion vulnerable downloads could be avoided each month. That’s approximately 40.8 billion vulnerable downloads per year!

Implementing code signing in every step of the software development life cycle (SDLC) can help shield your .exe files and software. It’ll also enable you to securely distribute and update all your codes, preventing forgery and tampering throughout your software supply chain.

Why would you want to do so? Because thanks to automation and the adoption of continuous integration/continuous deployment (CI/CD), software development has become faster than ever.

But, as the American frontiersman Wyatt Earp once said, “Fast is fine, but accuracy is everything.” if you aren’t careful (e.g., you don’t implement SSDLC), weaknesses and vulnerabilities can be easily overlooked. This makes any step in the software supply chain a perfect occasion to inject malware or modify code without anyone noticing.

how unsigned code put at risk
Image caption: The graphic shows how unsigned code can open the doors of your software supply chain to attackers.

Let me give you an example. Remember the Kaseya ransomware attack? At the time, TrendMicro’s Managed Detection and Response (MDR) team identified two other examples of small businesses developing software for large organizations being attacked by cybercriminals “Kaseya style.”

In both cases, the malicious actors inserted malicious code into legit .exe files (e.g., agent.exe) in their systems. If not stopped, the malware infection could have spread to any organization using the software (cybercriminal’s main targets) and caused substantial losses.

As you can see, code signing matters and can make a difference.

Want to know more about code signing? Check the National Institute of Standards and Technology’s (NIST) white paper.

OK, I’m In. How Can I Start Code Signing My .Exe Files?

So, how do you sign your .exe files and avoid customers asking, “Are all .exe file viruses?” It’s easy — you just need to follow a very straightforward process. Before you do that, ensure you have the following:

Do you use Visual Studio? You can sign your .exe directly in it too! Visual Studio can’t find the certificate? Keep calm and carry on. We have a solution for that. 

Last but, not least:

That’s all folks! Next time you have a doubt about the security of a file, or one of your customers asks you, “Are all .exe files viruses or malware?” you should:

  • Think about code signing,
  • Be aware of warnings,
  • Remember to use antivirus and anti-malware software,

and answer with a smile: “Nope, not all .exe files are viruses after all.”

Final Thoughts: Avoid the Effects of .Exe-Based Viruses and Malware with Code Signing

.Exe files are simply program files that can be run as programs on devices; as such, they can be exploited by cybercriminals for malicious purposes. However, as we’ve just learned, there are tools at your disposal that can help users, developers, and software vendors drastically reduce the risks of attacks and infections. One of these is signing your software using a code signing certificate that’s issued by a trusted third party (i.e., a CA like DigiCert).

Therefore, if you’re a user, follow the zero-trust approach (i.e., never trust, always verify). Check the product code signing certificate every time you run a .exe file.

As a developer or a software vendor, you can use code signing to offer assurance about the authenticity and integrity of your codes by adding your cryptographic digital signature. This will protect not only your customers but your organization and brand reputation as well as the long run. Want even more security and privacy? Discover other two ways to use digital signatures to boost the level of security of your digital assets. 

The post Are All .Exe Files Viruses or Malware? How to Check & Prove Yours Isn’t appeared first on Code Signing Store.

]]>
What Is a Software Testing Strategy and What Should It Cover? https://dev.codesigningstore.com/what-is-software-testing-strategy Fri, 18 Aug 2023 09:46:30 +0000 https://codesigningstore.com/?p=437671 Looking to strike the perfect balance between speed, quality, and costs like 40% of QA teams? Prepare your software for a successful launch by learning everything you need to know to create a rock-solid software testing strategy.  Is your software secure and trustworthy? According to CISCO, 94% of organizations confirmed that customers wouldn’t buy from… Continue reading What Is a Software Testing Strategy and What Should It Cover?

The post What Is a Software Testing Strategy and What Should It Cover? appeared first on Code Signing Store.

]]>
Looking to strike the perfect balance between speed, quality, and costs like 40% of QA teams? Prepare your software for a successful launch by learning everything you need to know to create a rock-solid software testing strategy. 

Is your software secure and trustworthy? According to CISCO, 94% of organizations confirmed that customers wouldn’t buy from them if their data wasn’t protected enough. This sentiment comes as no surprise when you consider how many data breaches make the headlines every week. Trust has become a big issue for customers in the last few years, and rightfully so.

A bad review regarding the security of one of your products, a glitch on your website, or — even worse — a data breach is enough to negatively impact your reputation and kill sales. How can companies mitigate these risks when a whopping 40% of software vulnerabilities are caught in production instead of being identified during testing?

A robust, well-built software testing strategy can help you cross T’s and dot I’s regarding your software’s security. It can help you ensure your product is secure and works as expected, even in the most unexpected scenarios. Let’s look under the hood at what a software testing strategy is, explore its potential, and the essentials it should cover to transform your testing procedures into winning actions.

What Is a Software Test Strategy?

The software test strategy is a document and approach to software testing. This resource includes a collection of guidelines explaining exactly how all organization’s applications and software tests must be designed and performed. In simple words, it provides a standardized approach to the whole software testing process.

So, is it just another document used by the quality assurance (QA) team to keep management happy? Not really. A software testing strategy is both the document and thought processes that’ll:

  • Guide testers through the software testing process to achieve their goals most efficiently,
  • Ensure that everyone involved in the organization’s projects is on the same page and part of the conversation,
  • Answer stakeholders’ questions and set expectations for the team and project as a whole, 
  • Improve the quality of your code,
  • Save time and money by helping you identify vulnerabilities and bugs earlier in the software development life cycle (SDLC),
  • Accelerate the time-to-market of your software, and
  • Increase collaboration among secdevops teams thanks to continuous feedback.

Created before the test plan, it’s a key part of the software testing life cycle (STLC), which is a crucial component of the SDLC.

software testing strategy fits into sdlc and stlc
Image caption: The graphic shows where the software testing strategy fits into both the SDLC and STLC processes.

With 84% of codebases containing at least one known open-source weakness, a software testing strategy will be your guiding light through the storm of vulnerabilities, malware, and bugs. It’ll ensure quality, efficiency, and reliability of tests by answering the following fundamental questions:

  • What must be achieved? (This question should be answered both from an overarching perspective and also address specific goals and actions.)
  • When must these items be achieved (i.e., this gives you a timeline so you can plan accordingly)?
  • How will you achieve those goals (i.e., what’s the best approach)?

Hold on, isn’t the test plan answering these questions, too? Does it mean that testing plans and software testing strategies are the same thing? Not quite — let’s explore their key differences.

Software Test Strategy vs. Test Planning: An Overview of the Differences

The software test strategy and the test planning have the same final goal: to ensure the software works as planned. How they achieve it, though, is based on very different things. Which ones? Let’s explore the key ones listed in our table below:

 Software Test StrategyTest Planning
What Is It Based On?
What Kind of Document Is It?
  • Organization-level document.
  • Project-specific document.
Who Creates It?
  • The project manager or,
  • The business analyst
  • Other team members are also often involved.
  • The test lead or,
  • Test manager.
  • The QA team and other stakeholders are also involved.
What Does It Define?
  • Testing vision,
  • Goals,
  • General approach.
  • Detailed testing actions
  • Coverage, and
  • Activities specific to a project.
When Is It Written?
  • Before the test plan.
  • It’s the second step of the software testing life cycle, just after the requirements analysis.
Can It Be Updated?
  • After it has been approved, it rarely changes.
  • Yes, it can be modified depending on project needs.
software testing strategy is embedded into the stlc
Image caption: The graphic shows where the software testing strategy is embedded into the software testing life cycle process.

Got the differences? Now, let’s explore the most widespread types of software testing strategies available so that you can pick the right ones for your projects.

The 7 Most Common Types of Software Testing Strategies

seven most popular types of software testing strategies
Image caption: The graphic shows the seven most popular types of software testing strategies.

Did you know that there are several types of software testing strategies? Each addresses slightly different needs, risk levels, and software development models (e.g., Agile, Waterfall). To help you choose the right one for your organization or product, we’ll look at the seven trendiest, one by one.

Would you rather skim the content of this section and quickly move on to discover the essentials that a best-of-breed strategy can’t do without? Then you should take advantage of our summary table below. But remember, as Andy Gilbert, the American baseball player and coach once said, “You can’t catch the big fish by skimming the surface.” This is why we have more in-depth information for our other readers. This next section will cover the seven software testing strategies outlined by LambdaTest.

Software Testing StrategyTesting Method DefinitionExamples of Factors It Should AddressWhen It’s Mostly Used
1. Methodical Software Testing Strategy
  • Based on fixed test conditions.
  • Follows a predefined standard.
  • Privacy and security regulations.
  • Software quality certifications.
  • Security checklists.
2. Reactive Software Testing Strategy
  • Built on identified defects.
  • Designed and implemented after software release.
  • Sensitive data transferred unencrypted.
  • Application bugs.
  • In the later phases of a project, or
  • After release.
3. Analytical Software Testing Strategy
  • Determined from analysis of requirements or risks.
  • Records results following the same criteria.
  • Encryption.
  • Secure password storage.
  • Level of code protection.
  • Between requirements and design phases.
4. Standards or Process Compliant Software Testing Strategy
  • Set up on industry/committee of standards guidelines/processes.
  • Test frequency.
  • Tests type.
  • Test methodology.
  • Early and later stages of the development process.
5. Model-Based Software Testing Strategy
  • Centered on model creation of an existing or predicted situation.
  • Includes processes and potential behaviors.
  • Malware protection level.
  • Between requirements and design phases.
6. Regression-Averse (or Regression-Based) Software Testing Strategy
  • Focused on reducing regression risks.
  • Tests common and unusual use cases.
  • New third-party vulnerabilities.
  • Leak of sensitive information.
  • With new versions of builds and releases (after version #1).
  • Every time a change or update is applied to the application.
7. Consultative Software Testing Strategy
  • Formulated upon key stakeholders’ input.
  • Priorities are set by the application owner.
  • Browsers and operating systems supported.
  • App stores’ compliance requirements.
  • Configuration settings.
  • Late stage.

1. Methodical Software Testing Strategy

Are your tests going to be focused on the security of the application or on specific standards? If your answer to either is yes, then this is the testing strategy for you. A methodical software testing strategy is an approach that’s based on predefined test conditions and standards created by developers, quality standards, and checklists across multiple application versions. If specific needs aren’t met, then the testing will fail.

It’s often used for achieving compliance with the following:

It’ll enable you to spot and address issues like:

  • Web application vulnerabilities caused by insecure coding practices. Is your app secured against all vulnerabilities listed by the latest OWASP top 10? Are payment details stored and processed correctly? These are the questions that this testing strategy will help you answer.
  • Network infrastructure weaknesses. Being compliant with PCI DSS implies that your internal network infrastructure handling cardholders’ data is robust enough to it against attacks. Test your network regularly and you’ll be fine.
  • Cloud-based applications security flaws. Did you move your applications to the cloud? It’s your responsibility to regularly test all operating systems and apps to identify and minimize security risks.

2. Reactive Software Testing Strategy

This software testing strategy has no prerequisites or standards to abide by as it’s built on defects that emerged after the software has been released. It’s ideal for:

  • Already released applications. Are you looking to check the flaws found in the running application to avoid adding more to-dos to your technical debt? This is a good software testing strategy methodology to use.
  • Newly written code. Are you working on new code but didn’t yet identify its strengths and weaknesses? Then go with a reactive test strategy. Why? Because Veracode research shows that 32% of applications are released flaws, which only continue to grow in the years after their release.

This reactive approach is fluid and enables you to address defects in released software as they’re discovered in the wild. Exploratory testing (i.e., unstructured, without prepared use cases) is a typical example of a reactive software testing technique.

exploratory testing
Image caption: The graphic shows how exploratory testing, a form of reactive software testing, works.

Exploratory testing works a bit like when we explored the great outdoors as kids. None of us needed a plan, maps, or pre-set rules to have fun, and discover hidden treasures. Developer and QA teams are much the same.

In this strategy, tests are instigated and performed in the later phases of a project, often after release, and/or once vulnerabilities like those listed below have been identified.

  • Sensitive data transferred unencrypted. Is the login information being sent through the insecure hypertext transfer protocol (HTTP) instead of going through the more secure hypertext transfer secure protocol (HTTPS)?
  • Application bugs. Is the application working as it should? If it isn’t, it might have some bugs.
  • Detailed error messages. Are error messages showing too much information that could lead to a data breach, as described under point 15.1 of the RFC2616

3. Analytical Software Testing Strategy (Risk- or Requirements-Based)

In this methodology, tests are always built on the analyzed risks or requirements. Even the test results are recorded with respect to the same factors. When should you use it? This software test strategy it’s excellent for:

  • Critical software products. Let’s say you have to create a critical application handling tons of customers’ sensitive data. To protect those data, the project manager has included in the BRS document specific security requirements and risks.  This is where the analytical software testing strategy comes in.

The QA team will have to build tests to ensure the code truly satisfies those requirements.

  • Agile Teams. Agile sprints are usually short. To make things worse, after release, the application becomes more complex, requiring every cycle some additional tests. The analytical test strategy can help QA teams choose and prioritize the correct tests based on risks or requirements.

In fact, in this strategy, all tests are based on and prioritized by the BRS document. That’s why they’re useful from the earliest stages of the project (i.e., requirements and design) to the end. They’ll help you verify factors like:

  • Data Security. To protect sensitive data from snooping, the application should transfer data between the server and the client encrypted and authenticated with the support of a secure socket layer (SSL)/transport layer security (TLS) certificate. Data at rest should also be encrypted to shield your valuable information from breaches.
  • Secure password storage. No passwords should be stored in a database. Only password hashes (i.e., a fixed-length string of hexadecimal characters obtained from running the password through an algorithm[ i.e., a mathematical formula]). The resulting hashes should be salted and peppered to add another layer of security.
  • Level of code protection. To protect your application from malware infection and attacks, all codes should be signed with a code signing certificate issued by a trusted certificate authority (CA). This validates your application’s authenticity and originality (i.e., it’s really coming from you), and indicates when there’s tampering (i.e., protects data integrity). 
how code signing prevent download malicious files
Image caption: The graphic shows how using code signing certificates can prevent the download or installation of malicious files.

4. Standards- or Process-Compliant Software Testing Strategy

The standard-compliant software test strategy is set up based on standards, guidelines and/or processes. For example, it’s optimal when:

  • Project teams follow a standard software development process. Agile, Scrum, you name it. If your organization has implemented a standard software development process, this methodology will make things go even smoother.
  • Applications must comply with standard regulations and laws. Does your web application allow online payments and, therefore, you must comply with the previously mentioned PCI DSS standards? Don’t worry; the process compliant test strategy will ensure you’ll achieve it.

Sounds familiar? This type of testing strategy is similar to the methodical one we discussed at the beginning of this section. The key difference? It’s strictly regulated by the standardized policies set by an authoritative body. Like the industry or government standards set by the Food and Drug Administration (FDA) or by a panel of specialists (e.g., the Agile alliance, or the CA/B Forum, IETF, or PKI Consortium in case of PKI infrastructure and digital certificates).

Typically used at both early and late stages of development, it’s hardly customizable. The key items addressed will depend on the set of policies you’ll have to abide by:

  • Test frequency. Many industry standards, such as PCI-DSS, require the regular testing of components to keep the application environment secure.
  • Tests type. Let’s stick to the PCI-DSS example. Depending on an organization’s size, it must run periodic penetration tests and network penetration tests after a significant change.  
  • Test methodology. If you’re following the Agile process, you’ll have to ensure that the whole strategy is built around your user stories. This incudes the test criteria, the tests to consider essential, and reporting.

5. Model-Based Software Testing Strategy

This is the type of software testing strategy I used for a machine learning-based security code. It uses ad-hoc created models in a kind of “virtual testing” environment to stress the system and, thus, predict the application’s behavior.

How does it work? The name says it all. It’s based on a model created with the unified modeling language (i.e., UML, a diagram for software systems) or with systems modeling language (i.e., SysML, a diagram for software system applications). It’s excellent for:

  • Performance testing. Want to know how scalable your application is? This strategy will let you check your app performance level with a hypothetical growing number of users, or against increased outbound or inbound traffic on your network.
  • Security testing. In Q2 2023, Cloudflare observed a 532% surge in denial of service (DDoS) attacks exploiting a vulnerability in Mitel collaboration software. You can build a model of your application to verify and enhance its resistance to this kind of network disruption attack.

As these tests are flexible and can be easily automated, it’s a popular strategy. It’s often implemented during the requirements and design phases of a project and enables teams to verify items like:

  • How well your software is protected against malware. What happens if a malicious third party or a user uploads an unsigned file? Will the application accept it and risk a potential malware infection spreading to the whole organization?
  • Whether your software is protected against man-in-the-middle attacks. When a user goes to the application login page, is the connection using the secure HTTPS protocol and a valid transport layer security (TLS) certificate?
check for connections protected by https
Image caption: Include a check for connections protected by HTTPS and a TLS certificate to avert man-in-the-middle attacks.
  • Brute force attack resistance. According to Verizon, 74% of data breaches in 2022 involved the use of stolen credentials. What happens when an attacker tests a list of stolen passwords to login into the application? Is there a failed login limit set or not?

6. Regression-Averse Software Testing Strategy

The name says it all. This type of highly automated testing focuses on minimizing the risk of regressions (i.e., making things worse) after implementing a change. How? By testing different use cases, from the most to least common.

This strategy is your best bet against:

  • Releasing a new feature that may damage your application. With automated functional and non-functional (i.e., not related to the application’s functionalities) regression tests, it’ll enable you to verify that nothing has broken (i.e., code integrity) before releasing the software.
  • Issues caused by an already implemented update. Was an update so urgent that you didn’t have time to test it fully? This sort of testing can be used as a form of post-release verification. You can even choose to focus on only specific components, or test the whole product (e.g., unit testing, system testing).  

When you update an application, you want to improve it, not make it worse, right? This software testing strategy is utilized in both early and later stages of the development process and includes checks that’ll identify issues like:

  • Use of an insecure code signing certificate. By mistake, instead of using a code signing certificate issued by a trusted CA, a developer selected a self-signed certificate available on its device or an expired certificate. Both oversights may look minimal, but they could be easily exploited by a cybercriminal to infect the application with malware.   
  • New third-party vulnerabilities. Since 2019, attacks on free repositories like npm and PyPI have increased by 289%. If your latest change included a third-party library or code, you should verify that it hasn’t introduced new vulnerabilities.

7. Consultative Software Testing Strategy

Also called directed software testing strategy, this approach is usually guided by the most knowledgeable stakeholder (e.g., your internal or external client) and is built around their requirements and ideas. In other words, this knowledgeable user decides what to test and how it’s going to be tested.

I can see raising eyebrows. I know, sometimes it can be difficult to fully understand a client’s requests, but this approach is suitable for:

  • Software testing companies. Valued $3.56 billion in 2022, the software testing outsourcing market is booming. Are you working for a software testing company? This is one of the typical software testing strategies you’ll work with.
  • Testing software compatibility. Before buying new software, organizations should always ensure it’ll work flawlessly with their systems. How do they do that? By providing their IT teams with a list of items to test for compatibility (e.g., internal applications, antivirus software, etc.).

Examples of what this software testing strategy is used to certify include:

  • Which browsers and operating systems are supported. Check that the code works as designed in all browsers the client requested you to support, including mobile-specific browsers. Why is it important? Just to give you an example, the telecom giant Ericsson has recently announced that the global mobile network traffic almost doubled in the last two years. You don’t want your organization or client to miss these potential customers, right?
  • Compliance with App stores requirements. Did you know that in 2022 consumers spent an incredible $167 billion buying applications from app stores? Making sure that the code is compliant with the most prominent app stores will probably be one of the most sought requirements by your client.
  • Any specific configuration settings that are needed. Ensure that the application is configured as specified by the client (e.g., using the default IDs and passwords isn’t permitted, it accepts as uploads only code signed files).      

Et voila’. Now you should have a better idea of what a software testing strategy is. Next, let’s find out what essential elements it should cover.

What Should Good Software Testing Strategies Cover?

top notch software testing strategy
Image caption: This is a list of essential items a top-notch software testing strategy can’t omit.

Did you already identify which software testing strategies among the ones we’ve just listed would best fit your project? Good. No matter which one you select, there are some essentials you should always include when drafting your software testing strategy document.

Think of it like building a car. Whether you’re going for a posh, expensive Ferrari or a small city car, some things will always be there (i.e., wheels, a motor, brakes, etc.). The same happens with software testing strategies —certain elements must be included.

1. Scope and Overview

This should be placed at the very beginning of your software testing strategy document and should describe:

  • What you want to achieve. Briefly explain your main goals to avoid getting off track or investing resources in unnecessary testing activities.  
  • A brief overview of testing and project activities. This should include for example, a high-level timeline, testing phases, exclusions (i.e., what isn’t going to be tested), and procedures.
  • Information related to the software testing strategy document. Don’t forget to add to your software testing strategy who is responsible for reviewing it and approving it, and a list of related documentation.

2. Types of Tests and Testing Methodologies

In this section you’ll define the key information about the tests that’ll be run during the whole SSDLC and why you’ll run them such as:

  • What type of tests are going to be included. List the tests that are going to be performed (e.g., unit tests, integration, regression, usability, acceptance, and/or performance).
  • Testing approach and procedures. Do you remember when we talked about the risk and requirement-based software testing strategy? This is where you should describe the approach to take, and the procedures to follow.
  • How test changes are going to be handled. Explain in detail the agreed upon change management process and who is going to be responsible for it.

3. Test Tools

List everything needed to run the tests (software and hardware). Such as:

4. Test Environment

This is another important part that’ll help you accurately define the test environments (i.e., specifically configurated hosts/servers to simulate production conditions enabling the QA team to test the code to identify issues and bugs).

For example, want to make sure your application will work smoothly with all major types of browsers? A cross-browser test environment will let you evaluate it on different browsers and versions. In this category, you’ll therefore mention:

  • Where each test is going to take place. Are you planning to perform some tests in a development environment and others in, test, staging, and/or in production environment? Specify this information.
  • Information about the chosen test environments. How is each environment (e.g., different devices, operating systems) going to be set up and configured? Is any of those environments going to be linked to a database?
  • Back up and restore strategy. In case of data loss (bad luck happens during testing too) what are the backup and restore procedures? Who is in charge?   

5. Test Priorities

Why is setting priorities important for your software testing strategy? Think about all the test case scenarios you could come up with for a single application. This is especially true for complex applications, where the number could be immense, requiring significant investments of effort, time, and money.

However, if you prioritize test cases based on risks and requirements, you may be able to limit their amount to the strictly necessary thus, increase efficiency and reduce costs. Therefore:   

  • Identify the project’s key testing priorities. Are you building an app that is going to handle sensitive information? Your tests will have to focus on security, and vulnerabilities. Is performance essential to your project? Add it to your list.
  • Establish priority levels. Categorize critical points by low, high, and critical priority. Don’t forget to add a brief description.
  • Weight your crucial functions wisely. In the case of regression tests, base your ranking on the most critical functionality from the business point of view, high-risk vulnerabilities and bugs, and areas with dependencies.

6. Entry and Exit Conditions

Once you’ve determined what tests to execute and how they’re to be conducted, it’s paramount to define entry and exit conditions.

  • Establish when the tests should start. The product manager and the stakeholders should establish the conditions and criteria of when the test is going to start (i.e., entry criteria). In the case of unit testing, one of these criteria could be when the requirements have been approved and test units are available.
  • Define when a test is considered concluded. The exit criteria should include all the activities needed to complete a specific test phase. Once again, in the example of unit testing, typical exit criteria could be when all critical test cases have passed (more on this in a minute).
  • Enumerate the documentation that’ll support the tests. Outline the documentation that’ll support the fulfillment of entry and exit conditions (e.g., test logs, and test summary).

7. Acceptance Criteria

How are you going to decide whether each test has passed? This is exactly what this section is all about, and it should include items like:

  • A clear and concise list of the minimum conditions defining if the test passed or not. For example, the code must be signed with a CA-issued code signing certificate. Are you following the Agile methodology? Base your acceptance criteria on user stories.
  • Explanation of how those terms are to be measured. Suppose that you’re testing for vulnerabilities. In this case, you may determine that a test will be considered successful only if all critical vulnerabilities have been fixed.
  • Additional support information. Providing a set of compelling sample scenarios meeting the criteria or, short checklists will help avoid misunderstandings.

8. Release Control

Ensure the test execution techniques and the release management have been properly, and effectively designed to reduce risks and improve the quality of the code that is going to be released. The section explains:

  • Who will be responsible for the release. It includes the names and contact details of the person in charge of the code release.
  • The approvals needed before the release. Spell out the approval chain to follow, if the code has to be reviewed before being signed off, and how all these activities are going to be tracked.
  • The defined time slot for the release. This way, the QA team will know exactly how much time they’ll have to properly test the code.

9. Reporting and Metrics

OK, the QA team is done with testing. Now what? To whom and how are the testing results and detailed outcomes going to be reported? Are graphics and tables going to be included? What about dashboards? Let’s establish it. 

  • Determine who will deal with test reporting and communication. Indicate who is going to be responsible for redacting, tracking, and communicating the test results.
  • Record  who is going to receive and analyze the outcomes. Are the test results going to be shared first with the software developers, and only after a thorough analysis, with the project managers, and/or product managers?  Document it to avoid confusion and false expectations.
  • Describe in which format the results are going to be reported, and how they’re going to be measured. How are you going to track the number of cases that passed or failed or, the percentage of requirements covered? You may use a common template that includes a test summary report, the execution, defect, coverage, and the test analysis report.

10. Risks and Issues

As the master of horror and supernatural books, Stephen King said, “There is no gain without risk.” The same goes for projects. There’s no project without risks, and just ignoring them would be futile. Therefore:

  • List and categorize all possible risks, and issues that could come up during testing. A typical example is when suddenly, one of the most experienced testers is off sick. What are you going to do when you already have limited resources, and time?
  • Prepare a mitigation and backup plan for each risk that may occur. In some situations, having a replacement tester trained and ready to step in (e.g., in case someone is sick) can save your bacon. 
  • Identify a responsible party for executing the backup plan should the worst happen. When you’re in the middle of a test, the last thing you want is to see all those hours spent on it going down the drain because you didn’t have a backup plan. 

There you have it. These were the key essential items a top-scoring software testing strategy should encompass. By the way, don’t forget to list the names and roles of those who reviewed and approved the strategy.

Do you want additional guidance to help you create your brand-new software testing strategy? Check out the following resources for further tips and ideas:

So, based on what you’ve discovered today, what is the software testing strategy that you think would work best for your organization and projects?

Final Thoughts on What a Software Testing Strategy Is and What It Should Cover

If you’re aiming to release top-quality and secure products, having a well thought out software testing strategy will put you on the right path. Add to it the OWASP secure coding practices and the code review checklists mentioned in this article, and you’ll immediately see the difference. 

Creating a compelling test strategy will help you select the right tests for the right reasons. It’ll make your whole testing system more effective and ensure that the product will be released in production without any major unaddressed issues. Just be sure your strategy covers all the essentials you’ve learned today, including:

  • What you’re testing and why,
  • Which items should be prioritized,
  • In which priority is each risk and security issue going to be addressed, and
  • What it’s going to be tested and when.

Remember: A test is only as good as the strategy behind it. Invest some time into developing your software testing strategy, share it with your peers to get their unique perspectives and feedback, and get ready to shine!

The post What Is a Software Testing Strategy and What Should It Cover? appeared first on Code Signing Store.

]]>
8 Software Development Methodologies You Can’t Do Without https://dev.codesigningstore.com/best-software-development-methodologies Mon, 07 Aug 2023 10:20:23 +0000 https://codesigningstore.com/?p=437563 75% of developers spend hours fixing production issues. Wondering which software development methodologies can help you identify flaws earlier, save time and money, and achieve excellence? Here’s what to know… This year, 83% of chief information officers were urged to accomplish more with less money. However, developing secure, high-quality software, fast, and without going over… Continue reading 8 Software Development Methodologies You Can’t Do Without

The post 8 Software Development Methodologies You Can’t Do Without appeared first on Code Signing Store.

]]>
75% of developers spend hours fixing production issues. Wondering which software development methodologies can help you identify flaws earlier, save time and money, and achieve excellence? Here’s what to know…

This year, 83% of chief information officers were urged to accomplish more with less money. However, developing secure, high-quality software, fast, and without going over budget isn’t a walk in the park for development teams.

As a result, codes may be released with unaddressed vulnerabilities, misconfigurations, or errors. Many of these same issues related to human-related errors are the basis of  74% of data breaches analyzed by Verizon’s 2023 Data Breach Investigation Report.

The good news is that many of these issues are preventable. Vulnerabilities and misconfigurations can be identified and addressed before deployment. How? With the support of a clear, structured software development process.

In this article, we have selected a pool of eight of the most popular and recognized software development methodologies. Want to make every software development project a success?

  • Learn each listed methodology’s key features,
  • Discover the pros and cons of implementing them, and
  • Figure out the right methodology and project combinations to meet your organization’s needs.

8 Top Software Development Methodologies

Do you know what’s my favorite moment in software development? The beginning of a new project. It’s a bit like Christmas. Everybody’s excited and they plunge headlong into the process. It’s a magical time; the start of a new adventure. Fast forward a few months and, suddenly, everything changes — sometimes, for the worse.

No one knows anymore who is doing what, team members are running around like headless chickens working on different bits and pieces, just following their guts. The outcome? A catastrophe. Deadlines aren’t met, requirements aren’t fulfilled, and everybody’s mood has suddenly darkened.

Welcome to the world of unstructured projects. It’s a place where chaos reigns supreme over unmotivated, stressed-out employees, and costs soar. The kind of place where projects have no future and your customers’ trust comes to die.

Want to transform this hell into paradise? Let’s go through the eight best software development methodologies options we have to bring structure to the situation. Choose wisely, though! Some software development methodologies may do more harm than good depending on your project and circumstance. C’mon, time to bring in some light in this dark realm!

 AgileScrumLeanFeature Driven Development (FDD)WaterfallSecDevOpsSpiral  RAD
Project SizeAny.Small and medium.Any.Large and medium.Any.Large and medium.Large and medium.Medium and small.
Development Speed1 to 4 weeks.2 to 4 weeks.1 to 2 weeks.2 weeks.Depends on the size of the project.Depends on the project’s size.Undefined.Very short, often 1 week.
Process TypeIterative.Iterative.Iterative.Iterative.Sequential.Security always comes first.Iterative.Iterative.
Is It Flexible?Yes.Yes.Yes.Yes.No.Yes.Yes.Yes.
ProsEnables faster software release; increases customer satisfaction, team performance, and project adaptability to changes.Boosts problem resolution and team communication; simplifies change adoptionProvides greater value; increases team motivation and project flexibilityReduces the number of meetings; increases scalability and delivery velocity.Improves project clarity and reduces the risk of going over budget.Produces highly secure products; enhances code delivery velocity and customer satisfaction.Reduces risks; elevates project flexibility and customer satisfaction.Increases customer involvement; offers greater adaptability and reduces development time. 
ConsRequires an experienced project manager and greater effort.Necessitates a change of mindset and requires skilled developers. Imposes tight deadlines and requires greater effort to keep the project on track.Entails a complex process that demands a strong lead and big enough projects.Imposes a rigid process, making it difficult to fix issues that impact customer satisfaction.Calls for additional training and skills due to its overall complexity.Requires highly qualified team members with risk assessment and rigorous time management expertise.Depends on active customer feedback, seasoned developers, and automation. This makes it unsuitable for critical products.
ApplicationsFast-growing technology products; urgent, unstructured, complex, or low-code projects.Small and fast-paced projects, or those with vague requirements and frequent changes. Requires skilled teams.Small projects with a tight budget and a newly created team, or startups with motivated staff.Suits large, long-term projects and organizations with remote teams.Benefits small/medium size projects with clear requirements and inexperienced teams.Highly secure applications projects, and organizations aiming to reduce time to market to boost revenues.Large, expensive, and complicated projects that require high flexibility.Small and medium software applications with tight deadlines and/or budgets.

1. Agile

Every IT professional has heard about Agile at some point in their career. Based on GoodFirms’ latest survey, it’s one of the most popular software development methodologies adopted by 61.50% of organizations. Why? According to the 16th Annual State of Agile report, 52% of businesses use it to accelerate time to market; 31% say they do so to lower risks associated with adding new features (e.g., bugs, deficiencies, higher costs). Some of its principles have been embraced by other methodologies, such as Scrum and Feature Driven Development (more on these later in the article).

Agile is an iterative module that focuses on producing working software quickly, accommodating changes, and making users happy. It’s not about creating tons of documentation and following strict, inflexible procedures. How does it work? The development process is broken into small “challenges” (i.e., 1-4-week sprints) to complete. The developers identify a priority or an issue and work on it to fix it. The outcome? A working software application (i.e., minimum viable product) that’ll be improved at each iteration.

agile software development methodology
Image caption: The graphic shows the main steps of the Agile software development methodology.

Agile Methodology’s Pros

  • Fix issues and release software fast. Did a customer who downloaded one of your apps complain because they got a security warning? Oops! Maybe you didn’t sign the code before publishing it because your code signing certificate expired and you forgot to renew it. With Agile, you can create a new sprint and get it fixed in no time.
  • Respond to project changes easily. Your customer changed their mind about a feature and you need to adapt the app to new requirements? Thanks to short iterations, you can quickly fulfill their request without delaying the release date.
  • Increase customer satisfaction and team performance. Customers receive a working product in a short time, while developers can focus on what they do best instead of dealing with bureaucracy.

Agile Methodology’s Cons

  • Could create problems due to lack of documentation. A new colleague joined the team in the middle of a project? This is one of the software development methodologies where you can’t count on documentation support.
  • Requires an experienced project manager. Do you think a junior project manager can easily run an Agile project? Think again. Agile projects can become too complex and easily go out of hand if you don’t have the right experience.
  • Can be labor intensive. As iterations are short (four weeks max, remember?), the teams might feel the pressure of having to deliver a complete product in a short time.

When Should You Use the Agile Methodology?

Recently chosen even by the Department of Defense (DOD) among all the other software development methodologies to keep up with new threats, Agile is perfect for:

  • Projects related to a new niche where market needs are still unknown.
  • Fast-growing technology products requiring frequent improvements on the go.
  • Urgent, unstructured, complex projects of any size.
  • Perfect for low-code projects as its practices are similar to those highlighted by the Agile manifesto.

2. Scrum

Did you know that teams that choose to fully embrace Scrum as their sole software development methodology have 250% higher work quality compared to those utilizing only part of the Scrum process (i.e., hybrid method)?

Built on the Agile principles, and highly flexible, each sprint is worked on by a focused and self-organized development team guided by the Scrum master. The client is represented by a product owner who in charge of translating requirements into user stories (i.e., a brief description of a feature from the client’s point of view).

scrum process phases
Image caption: The graphic shows how Scrum works.

Scrum Methodology’s Pros

  • Problems are fixed quickly. In 2022, 25,096 new vulnerabilities were discovered. That’s 24.2% more than the previous year. Ensuring that security flaws are addressed as earlier as possible in the software development life cycle (SDLC) has therefore become imperative. Short iterations allow you to do exactly that.
  • Everyone is always on the same page. Frequent meetings (e.g., sprint planning, daily standups, and reviews) ensure that each team member remains up to date and motivated.
  • Changes aren’t an issue. Did the customer decide to add a new requirement? Scrum is agile in nature, too! Make the magic happen. Add a new task and prioritize it in the next sprint.

Scrum Methodology’s Cons

  • Daily meetings can be a burden. “Dailies” are a double-edged sword. They’re great for sharing project quick status updates, but if badly managed, they can also become tedious repetitions of things that people already know. The solution? Add a visual board to keep people focused on what matters.
  • Isn’t suitable for less skilled developers. Working on short sprints means that developers will have to concentrate a high amount of work in a bat of an eye. Want to meet tight deadlines? You’ll need team members able to handle tasks quickly and without support.
  • It requires a change of mindset. I remember when one of the organizations I was working for decided to implement Scrum. Teams were reorganized and new processes were implemented. Managers had to stop micromanaging, and team members had to change how they approached work. It wasn’t easy at the beginning, but it was well worth it.

When Should You Use the Scrum Methodology?

Imagine that a client asked you to create a restaurant table booking application to help him get more customers, but he doesn’t know what he wants. The client throws a few ideas at you and says: “Let’s see how it works and go from there once I have seen the first working software.” In other words, do something, I’ll test it and then I’ll ask you to change it again. This is a good example of a project where the Scrum approach would work. And there are more:

  • Small/medium and fast-paced projects with tight deadlines.
  • Projects with highly experienced and fully committed teams.
  • Activities where requirements are vague and change frequently.

3. Lean

Want to reduce waste (e.g., time and resources) and enhance efficiency? This might be one of the software development methodologies for you. Based on the Agile philosophy, and on the Japanese car manufacturing Toyota’s principles, Lean gets rid of all non-productive tasks. In such a manner, developers can focus on boosting the quality of their work and identify bottlenecks.

Lean has a very short development iteration (1-2 weeks). Once a minimum viable product is produced, it’s improved based on customer feedback and market trends.

Users are engaged at every phase of the process, and team members work in small groups to enhance interaction. Communication among teams is emphasized and viewed as a gesture of mutual respect, like in Japanese society.

lean software development methodology
Image caption: The graphic shows the Lean software development methodology.

Lean Methodology’s Pros

  • Get more value with less effort. Cut all the nonsense (e.g., unnecessary documentation, and repetitive tasks) bringing no value to the final product. Eliminate redundant code that could introduce security issues. You’ll get more valuable software at a reduced cost, in a fraction of the time.
  • Increase motivation among teams. Team members will be more independent and won’t have to follow top-down directives. The developers will be free to decide what’s best and create their own solutions. Wouldn’t this make you feel empowered and motivated?
  • Flexibility is king. Unlike other software development methodologies, Lean doesn’t have a fixed project vision. Valid alternatives stay on the table until it’s time to make a decision. Isn’t this a valuable factor in uncertain or highly changing environments?

Lean Methodology’s Cons

  • It’s easy to get off track. Not having a strategy can be helpful in some cases but, in others, teams could easily lose sight of the final goal and pick the wrong tasks to focus on.
  • Lean isn’t for the faint-hearted. Did you know that in 2022, 74% of data breaches were caused by human errors? Can you imagine the level of stress a new developer would suffer realizing that a wrong decision could jeopardize the success of the project?
  • Deadlines are incredibly tight. Have you ever tried to create a simple, high-quality, working piece of code in two weeks? It’s tough, even for the most seasoned developers. Don’t get me wrong, it’s feasible, but only if you have highly motivated and skilled teams.

When Should You Use the Lean Methodology?

Let’s go back to our beloved table booking application example. This time the client requesting it just opened a taco bar in a small village. As it’s the only Mexican eatery for miles, the owner has been immediately overwhelmed by bookings. He needs some form of automation. However, like many new businesses, he’s cash-strapped, and can only afford something basic and cheap, but he needs it fast.

This is an example where the Lean process could work just fine, as it’s great for:

  • Small projects with a tight budget.
  • Organizations with a newly created team.
  • Startups with small teams and highly motivated staff.

4. Feature Driven Development (FDD)

This approach is similar to Scrum, but with nearly no meetings and a greater focus on function. FDD is also one of those software development methodologies based on Agile principles. Development activities are broken down into a list of features. Each feature is built through an iterative process lasting no more than two weeks.

FDD Methodology’s Pros

  • More documentation and fewer meetings. Nearly all meetings and communications are replaced by comprehensive documentation; thus, the developers can work autonomously.
  • High scalability. Focuses on features that can be added as often and as many as needed. This makes it perfect for scalable, long-term projects.
  • Delivery is fast and frequent. Working software is delivered to the customer at the end of every short iteration.

FDD Methodology’s Cons

  • Complexity. As most communications are replaced by documentation, each iteration’s step must be perfectly defined to the last detail. And it ain’t easy.
  • Small projects are a no-no. Unlike Scrum, this methodology isn’t designed for small-size projects or those with a single developer.
  • Need a strong lead. To make it work, you’ll have to pick the right head developer. Why? Because they’ll be the conductor in charge of coordinating the tasks. If you pick the wrong person, you’ll have a mess on your hands.

When Should You Use the FDD Methodology?

Has your table-booking application has become so successful that a big corporation wants you to develop a luxury, features-rich version to implement on all their sites worldwide? FDD may be the best candidate among all the software development methodologies we’ve listed. And it can also be useful for:

  • Large and long-term projects.
  • Organizations with teams working mostly remotely (e.g., developers).
feature driven development methodology
Image caption: The graphic shows the FDD process.

5. Waterfall

One of the most traditional and straightforward software development methodologies, it’s still used by 9.6% of organizations surveyed by GoodFirms. It’s a rigid, linear model — the opposite of Agile — and based on sequential phases. Each step has to be completed in the right order before starting the next one. The length of the development time varies from project to project.

Want to go back to add a feature or modify something? Too bad, you can’t, there’s no way back. This is why documentation, timeline, resources, and budget must be determined before starting the project. Working with Waterfall is a bit like working in a military base: everything is very organized, and the routine is dictated by strict rules.

the waterfall software development methodology
Image caption: The graphic shows the phases of the Waterfall methodology.

Waterfall Methodology’s Pros

  • Includes clear plans and documentation. As everything is set before starting the project, goals, milestones, and tasks are crystal clear. No doubt, no danger of going off track anymore. Like when you follow your car’s GPS directions to get to a destination.
  • There’s no danger of going over budget. How many times have you seen projects go over budget, and unhappy customers get slapped with a hefty bill? This doesn’t happen with Waterfall. Cost estimations are prepared in advance, making waterfall one of the most accurate software development methodologies in that regard.
  • It’s easy to understand. Do you have a lot of newbies in your team and you’re worried that they won’t be able to rise to the challenge? No more worries. The linearity and transparency of the Waterfall process will keep many potential pitfalls away.

Waterfall Methodology’s Cons

  • There’s no room for unexpected changes. Waterfall’s plans and requirements are nearly carved in stone, but customers’ exigencies and markets aren’t. With such a rigid structure, complexity and changes aren’t welcome.
  • Trying to fix issues can be challenging. Did you identify a critical security issue? Fixing it isn’t going to be as simple as ABC. Why? Because tests are run at the end of the development process, leaving the teams with just a tiny time window to address it.
  • Could negatively impact your customer satisfaction. When was the last time you had a customer with a clear project vision from the very beginning? They’re as rare as white tigers. And, as the client won’t see the code until it’s ready, the peril of doing something they don’t like (requiring costly last-minute changes) is high.

When Should You Use the Waterfall Methodology?

Imagine for a moment that your boss wants to add two simple features to the table-booking application you created for a client a few months ago. The customer has provided an accurate explanation of their requirements. Would this be the right candidate for the Waterfall methodology? Yup, just like in the case of:

  • Projects with a clear set of requirements from the very beginning.
  • Products requiring comprehensive and detailed documentation.
  • Activities where the final product is based on familiar technology.
  • Small and medium size projects with a predictable outcome and a team of rookies.

6. SecDevOps

According to Barracuda, 73% of organizations were victims of a ransomware attack in 2022. To make things worse, Veeam discovered that the average downtime caused by such attacks is of 136 hours. That’s downright scary. Knowing this, security needs to be considered of the utmost importance for software developers.

Among all the software development methodologies in our list, SecDevOps is the one explicitly putting security first in every step of the development life cycle, from start to finish. It’s an augmentation of DevOps (already embraced by 45% of the teams that participated in Logz.io DevOps Pulse 2023). 

Sometimes confused with this similar but slightly different twin DevSecOps, SecDevOps get the security, development, and operations teams working together in perfect harmony. The result? Secure, reliable, and high-quality products. Regular security checks are integrated at each step of the process. Critical flaws are identified, prioritized, and addressed on the go.

the secdevops software development methodology
Image caption: The graphic shows the steps of SecDevOps.

SecDevOps Methodology’s Pros

  • Produces exceptionally secure outputs. How? All vulnerabilities are either addressed before moving to the next stage of the SDLC, or they’re prioritized and included in the workflow as items to work on. This will enhance security and keep your technical debt at the bare minimum.
  • Increase the velocity of code delivery. In today’s highly competitive environment, it’s the early bird that gets the worm. Increasing cooperation between teams and fixing flaws earlier will save you tons of time (and pretty dollars) while dramatically reducing the time to release. No more eleventh-hour bad surprises.
  • Higher customer satisfaction. Your customers want only one thing from you: a secure, first-rate product delivered fast. And this is what they’ll get once you’ve successfully implemented SecDevOps.

SecDevOps Methodology’s Cons

  • You’ll have to invest in training. Want to put security first? Every single member of your teams, including developers, and the operations guys will have to be trained on security best practices (e.g. secure coding, database security).
  • Setting it up can be challenging. Only 14% of developers considered security a top priority in 2022. Big mistake. A secure code starts with developers too. How? To give you an idea, by signing codes with a trusted (i.e., issued by a certificate authority) digital certificate to prevent tampering and guarantee integrity.
  • It’s one of the most complex software development methodologies (but it’s worth it). Forget the simplicity of Waterfall — this is the complete opposite. Want to be able to constantly test and monitor every single development phase, keep security at the forefront, and anticipate unwanted issues? You’ll need tech-savvy, highly committed teams that also excel in innovation and communication.

When Should You Use the SecDevOps Methodology?

The correct answer? In virtually all medium and large projects. Like all the others on our list, SecDevOps can be applied together with any software development methodology you choose to enhance security and collaboration. Even in the case of our table booking application example? That’s elementary, Watson!

7. Spiral 

Also mentioned in the National Institute of Standards and Technology (NIST)’s Secure Software Development Framework (SSDF), Spiral is an effective risk-driven approach based on a mix of Agile and Waterfall practices. It’s visually represented in a swirling, twisting spiral-like design (hence the name). Focusing on iteration and risk detection, each spiral corresponds to a step of the software development process, where prototypes are built and gradually refined. This enables your team to identify issues early and manage unanticipated risks.

the spiral development methodology
Image caption: The graphic shows how the Spiral methodology works.

Spiral Methodology’s Pros

  • Higher risk avoidance. Risk analysis is included in every step of the project from the beginning. Security flaws and bugs are identified and fixed as soon as they’re found.
  • It’s very flexible. Change requests based on feedback, new vulnerabilities, new features — you name it. Everything can be added or changed whenever it’s necessary without any hassle.
  • Can increase customer satisfaction (and abate costs). Clients can check the product (e.g., a prototype) during each phase of the development. This means that modifications can be made before the final release keeping your customer happy and saving you money and time. 

Spiral Methodology’s Cons

  • You can’t do without risk assessment expertise. Want to be able to identify and correctly handle project pitfalls? You’ll have to fork out some money on a risk assessment expert. 
  • It’s complicated. Just compare the Waterfall and Spiral graphics. Which one looks more complex? Spiral, right? So, remember, for such an intricated process to succeed, you must follow procedures and thoroughly document everything.
  • Time management can be an issue. Flexibility is great, but it also makes it nearly impossible to forecast the number of phases to complete before release. The consequences? Running behind schedule or going over budget.

When Should You Use the Spiral Methodology?

Imagine that a new potential customer approached you about the booking app you built for the local restaurant. This time it isn’t another mom-and-pop business; rather, a restaurant chain with hundreds of locations all over the country. Their requirements are different, and they don’t mind splashing out cash on countless new features.

Yes, it’ll probably take time and a lot of work but, if you get it right, it may translate into a lifetime contract and big bucks. Wouldn’t it be the perfect chance to give Spiral a try? When can you also use it?

  • For large, expensive, and complicated projects.
  • When are needed accurate risks and cost evaluations.
  • When changes can happen at any time.

8. Rapid Application Development (RAD)

The key word here with RAD is quick. Specifically designed for speed, each iteration of this software development methodology produces a prototype that is released to the customers for final testing. Once the feedback is collected, your team re-works the prototype. The same steps are followed until the released product fulfills all of your customer’s requirements and expectations.

But wait, has your client changed his mind about a feature or wants to add something else to it? No problem. You can squeeze it in in the next iteration. He’ll be delighted, and you won’t release something he isn’t comfortable with.

the rapid application development methodology
Image caption: The graphic shows the steps of RAD.

RAD Methodology’s Pros

  • Customers get involved from the beginning. Are you looking to produce software that’ll exceed your customers’ expectations? This is one of the software development methodologies that can make it happen. In fact, customers are actively involved throughout the whole SDLC by providing iterative feedback.
  • It’s extremely adaptable. Did you receive a new customer’s request during prototyping? You can still include it. Code building is left at the very end of the iteration.
  • Reduces development time (and costs). Teams are small, keeping the costs low. Working with prototypes and leaving code-building activities at the very last moment has another advantage. As the final prototype looks very closely to the final code, coding revisions are kept to the minimum, which saves you precious time.

RAD Methodology’s Cons

  • It depends a lot on active customer feedback. Do you have a prototype ready but you’re still waiting on customer input? Houston, we have a problem. To make this process work, you’ll need highly responsive customers ready to get involved from the very beginning.  
  • Skilled developers and automation are an expensive must. Automation is among the top three CIO’s business initiatives driving investments in 2023. RAD is based on automation. But, automation requires upfront high expenditures in sophisticated development tools like computer-aided software system engineering (CASE) tools, advanced programming techniques, and skilled developers.
  • Not suitable for vitally important products. RAD is fast paced. It’s so fast that it isn’t recommended for some highly sensitive products where even a small oversight or glitch could put lives in danger. For instance, no one would build flight control software or pacemaker firmware following the RAD methodology as both would need much more time and accuracy.

When Should You Use the RAD Methodology?

Let’s look at the table booking application example again. After the latest MOVEit data breach affected thousands of well-known firms globally, your customers want a more secure app. You, therefore, add a layer of protection to the web application by ensuring that even those pages that aren’t transmitting highly sensitive data (e.g., credit card numbers) are encrypted using a transport layer security (TLS) protocol (formerly SSL, or secure sockets layer) and a strong hashing algorithm.

The RAD method will let you implement this change in no time. What else can it help you with? 

  • Developing small and medium software applications on a tight deadline.
  • Being successful when dealing with projects requiring rapid changes on a budget.
  • Creating and releasing quick software updates.

OK, now that you have a complete pool of software development methodologies candidates, why should you bother changing the way your teams are working? There are several jolly good reasons. Let’s explore the four most important ones.

Why Should You Follow a Specific Software Development Methodology?

Yes, why shouldn’t software development teams just follow their guts or the same old routine instead of implementing something new that may take too long to learn, and restrict their autonomy and creativity?

  1. Structure. A software development methodology will bring order and structure to an unorganized software development workflow. How can you keep track of customers’ shifting requests, changes in priorities, and bugs when your procedures are vague and based on habits?
  2. Security. It’ll help you reduce exposures by ensuring that critical vulnerabilities are promptly identified and addressed. Goodbye, last-minute patches, and codes sprinkled with flaws!
  3. Costs. Learning how to make the most of the people you have, you’ll create a five-star software program, fast, and at a lower cost. And this takes us to the next point.
  4. Quality. Do you have an idea of how much poor-quality software costs the U.S. in 2022? Based on the last estimation, at least $2.41 trillion (according to CISQ). Software vulnerabilities and technical debt are two of the top root causes. Want to increase the quality of your codes? Follow one of the software development methodologies listed above.

So, there you have it. All you have to do is pick your favorite framework, give some structure to your tasks, and create superior, secure codes while reducing the overall development costs. Boom! You’re on the right track to generate outstanding products that’ll supersize your sales.

Final Thoughts on Software Development Methodologies

Using the right software development methodology is critical to the success of every software project. Because, as we’ve just learned, one size doesn’t fit all. Each methodology has its own strengths and weaknesses, and it can be more or less effective depending on the situation.

 Large projects may benefit from implementing the Agile or Feature Driven Development methodology. Those requiring predictability, fewer adjustments, and a stable process may succeed following the more traditional Waterfall method.

Did you like different aspects of multiple software development methodologies but can’t land on just one to use? That’s alright. You can always take the hybrid approach: pick what you like from what you’ve just discovered, mix them together, et voila’ — you now have your very own software development process. As long as it’s repeatable and structured, it’ll work. Just be sure to integrate security throughout your process to avoid security-related headaches down the line.

Wait! Before you go, don’t forget that to develop secure and high-quality products, you need to:

Only then will your organization be ready to crank out more secure and successful software than ever.

The post 8 Software Development Methodologies You Can’t Do Without appeared first on Code Signing Store.

]]>
10 Essentials Your Code Review Checklist Should Cover https://dev.codesigningstore.com/10-essentials-your-code-review-checklist-should-cover Wed, 26 Jul 2023 05:56:50 +0000 https://codesigningstore.com/?p=437422 How good is the code your team has written? Find it out by adding nine indispensable points to your code review checklist that’ll help increase the quality of your code, minimize security risks, and reduce technical debt.   In 2022, 35% of developers released software twice as fast as the previous year. But speed isn’t everything… Continue reading 10 Essentials Your Code Review Checklist Should Cover

The post 10 Essentials Your Code Review Checklist Should Cover appeared first on Code Signing Store.

]]>
How good is the code your team has written? Find it out by adding nine indispensable points to your code review checklist that’ll help increase the quality of your code, minimize security risks, and reduce technical debt.  

In 2022, 35% of developers released software twice as fast as the previous year. But speed isn’t everything — 40% of organizations struggle to strike a balance between speed, quality, and costs without incurring too much technical debt.

Pairing a useful code review checklist (i.e., a methodical assessment of other programmers’ written code before merging it) with a winning software development strategy can help boost the quality of your code while reducing development costs and technical debt. 

But not all code review checklists are the same. Discover nine essential items that’ll transform your code review activities into an efficient, quality-oriented, and highly performant process. Learn how to make high technical debt, skyrocketing costs, and poor-quality software a thing of the past.

Discover the 10 Absolute Essentials to Include in Your Code Review Checklist

how the code review process works
Image caption: The graphic shows how the code review process works.

Take it from me — effective code review isn’t something to rush. The last time I assisted in releasing a software update after a rushed (and sloppy) code review, it was rolled back 30 minutes later. At the time, code reviews were primarily based on the ‘guts feelings’ of the reviewer of the day, transforming every review into a numbers game.

The team often wondered how other organizations could save money and find more flaws just by having regular code reviews. What was the catch behind it? Have you ever heard of Smartbear, a software manufacturing company?

One of their customers experimented: they calculated how much money their organization could save by reviewing code from the beginning of a project. The results were shocking. They discovered that by implementing periodical code reviews, they could keep more than $200,000 in their pockets and find 162 additional bugs.

We knew we were on the right track, but we were still missing something. That’s when we started experimenting with code review checklists. Six months and many code review checklist versions later, we finally found the perfect ingredients. From then onward, code releases were no longer a leap into the unknown. The code quality dramatically increased, development costs decreased, and team members were learning from each other.

Want to discover the magic ingredients of our code review checklist recipe for success? Here’s a 60-second overview:

Code Review Checklist EssentialsSample Questions
1. Check If the Code Includes All Feature Requirements
  • Are any requirements included in the feature request ticket missing from the PR?
  • Has any requirement been implemented incorrectly?
  • Is there any approval missing (e.g., stakeholders)?
2. Verify Code Readability
  • Is the code easy to read and understand?
  • Are classes, functions, and methods small enough so that are easier to understand and remember?
  • Do the variables, functions, methods, and classes have compelling names that tell you what they do, how they’re used, and are easy to search?
  • What about the comments? Are they necessary?
  • Does the code flow make sense, and is it free from syntax and logical errors?
  • Is the code located in the correct folder and package?
  • Could the code have been written more simply?
3. Look For Duplications
  • Is the same code duplicated?
  • Is there a reusable function or class that can replace the duplicate code?
  • Are there any redundant copies of data increasing storage overhead?
4. Examine the Level of Maintainability
  • Is the configuration hard coded?
  • Do the changes rely on old code or libraries?
  • Is the code easy to modify or extend?
  • Does it follow the KISS (i.e., keep it simple, stupid) principle?
5. Look for Data Security, Privacy, and Compliance Issues
  • Does this code handle authentication securely?
  • Do users get access to the application following the principle of the least privilege?
  • Did the developer sign the code with a code signing certificate issued by a trusted certificate authority (CA), or did they use a self-signed certificate?
  • Are any credentials hard-coded into the code?
  • Is the code compliant with actual privacy and security regulations?
  • Is all sensitive information securely handled and stored?
  • Are there measures (i.e., input sanitization and validation) in place to prevent cross-site scripting or SQL injection attacks?
  • Is the data retrieved from external APIs or third-party libraries properly validated?
6. Assess the Code’s Grade of Reusability
  • Is there any similar functionality elsewhere that can be reused?
  • If there is one, why hasn’t it been used in this case?
  • Are functions and classes used generic enough so that they can be reutilized later?
7. Figure Out the Code’s Scalability and Reliability
  • Has the code been written with the assumption that it’ll be changed or will have failures in the future?
  • Does it support a larger user base or data?
  • What will happen if high-traffic requests hit the application due to a DDoS attack?
  • Will the code work even if, for example, the SQL database behind it is offline?
  • What about if you had to change some given parameters — would the code give an error?
8. Find Out About Errors Handling
  • Are error messages user-friendly yet generic enough to protect your application from attacks?
  • Are events logged and stored long enough to allow debugging and security investigations in case of incidents?
  • Is this update ensuring that saved logs won’t display sensitive information that could lead to a data breach?
  • If the debugging information was accidentally exposed in production, could an attacker identify potential vulnerabilities or ‘open doors’ in the system?
9. Review Code Test Coverage and Quality
  • Did you find any test that was specifically created for the actual code change to cover the requirements?
  • Is the quality assurance (QA) process used also including unit, integration, and system tests?
  • Are all tests following agreed best practices?
  • Are there any test cases that are missing or too generic?
10. Find and Analyze the Documentation Available
  • Is there a ReadMe file and is it updated?
  • Do the configuration and other documentation files include all the last changes and information?
  • Is the documentation easy to understand even by a non-technical colleague?

Want to discover the magic ingredients of our code review checklist recipe for success? Keep on reading!

1. Check If the Code Includes All Feature Requirements  

Before immersing yourself in the code, have a look at the feature request tickets and the pull requests (PRs) – i.e., when the developer starts the process of integrating new code changes into the main project – and ask yourself:

  • Are any requirements in the feature request ticket missing from the PR?
  • Has any requirement been implemented incorrectly? 
  • Is there any approval missing? For example, has it been approved by all stakeholders and the project manager?

If the answer to even one of these questions is yes, stop the code review and send the PR back to the developer. There’s no point reviewing something that’s going to change again. The PR looks perfect? Then you can move on.

2. Verify Code Readability  

Research shows that when people read something on a screen, they comprehend less of what they’ve read compared to when they read the same text written on physical paper? Since the year 2000, this has increasingly become truer with the advent of smartphones.

Why should you care? When a developer writes a piece of code, he or she isn’t the only one who is going to work on and use it. So, if reading on a screen comes with its challenges (e.g., scrolling and risking losing the thread), how can your colleagues or even you, as a reviewer, do a good job if the code is poorly written or formatted?

So, during your review try to answer questions like:

  • Is the code easy to read and understand? Does it fit the standard 14-inch laptop screen? Is it structured well? Having to scroll horizontally to view the code is extremely annoying, which makes it easier to miss issues and make mistakes.
  • Are classes, functions, and methods small enough? Are they broken down into small chunks) so that they’re easier to understand and remember?
  • Do the variables, functions, methods, and classes have compelling names? Do those names tell you what they do, how they’re used, and are easy to search?
unclear vs meaningful name
Image caption: The graphic shows the difference between an unclear and a meaningful name. Which one would you prefer as a code reviewer?
  • What about the comments? Are they necessary? If yes, clearly explain why these changes are being implemented.
  • Does the code flow make sense and is it free from syntax (i.e., typos), and logical (i.e., mistakes causing a program to behave incorrectly) errors? If this is not the case, it’s time to fix it for good.
examples of correct syntax
Image caption: The graphic shows examples of correct syntax (right column) and logical errors (left column) in Python.
  • Is the code located in the correct folder and package? If not, a more appropriate location should be noted.
  • Could the code have been written more simply? Provide suggestions for improvements.

3. Look For Duplications  

Many years ago, France and Italy passed legislation requiring organizations operating within their territories to replace foreign language terms with ones in the local language. I remember the humongous amount of work our communication team had to go through to replace every single English term with an equivalent French or Italian term.

Imagine having to implement this type of change on a functionality that’s scattered throughout your code. Without any shortcuts (one of which we’ll mention momentarily), it’ll take you ages to hunt all those similar items down, and it’ll definitely have an impact on your speed of delivery.

Find out if the code’s author followed the DRY (Do not Repeat Yourself) concept by including these simple questions in your code review:

  • Is the same code duplicated?
  • Is there any reusable function or class that can replace the duplicate code?
  • Are there any redundant copies of data increasing storage overhead?

Pro tip: Time constraints are among code reviewers’ top three challenges. Use hash tables to find duplicates in an array quickly. (Remember the “shortcut” we mentioned a few paragraphs ago? This is what we were talking about.) Hash functions let you transform data into a fixed-length value (i.e., a hash digest). These values can be stored in a table that you can use to organize and keep track of unique elements. Why should you do it? Because it’ll reduce the time taken to search for duplicates.

How does it work? Once the hash table has been created, you can then iterate through the array elements. If the element isn’t in the hash table, it’ll be added to it. Is the element already present in the table? Congratulations! You found your first duplicate. It’s easy as pie and your array won’t be modified.

example of how a hash table can help you find duplications
Image caption: The graphic shows a simplified example of how a hash table can help you find duplications in your code fast.

4. Examine the Level of Maintainability

As Mahatma Gandhi said, “The future depends on what we do in the present.” This is why ensuring that a code requires little effort to support, update, and fix bugs is paramount.

Ask yourself:

  • Is the configuration hard coded (i.e., embedded into the source code)? (Hint: It shouldn’t be.)
  • Do the changes rely on old code or obsolete libraries?
  • Is the code easy enough to be modified or extended without too much work?
  • Does it follow the KISS (i.e., keep it simple, stupid) principle?

Why is it so important? Because the more maintainable the code, the less time the developers will need to change it, and the lower will be the risk that the change will break something.

Pro tip: You may also want to verify if the code follows Robert C. Martin’s Principles of OOD (i.e., Object Oriented Design), as neatly summarized by Michael Feathers’ SOLID acronym.

  • Single Responsibility. “A class should have one, and only one, reason to change.” In layman’s terms, one class, one responsibility.
  • Open Closed. “You should be able to extend a class’s behavior, without modifying it.” Basically, you should be able to add new features without modifying the existing code for the class.
  • Liskov Substitution. “Derived classes must be substitutable for their base classes.” This means that a subclass should be good enough to substitute the related base class.
  • Interface Segregation. “Make fine grained interfaces that are client specific.” I.e., separated interfaces are better than a big, generic one.
  • Dependency Inversion. “Depend on abstractions, not on concretions.” Otherwise said, classes should depend on interfaces or abstract classes, not on functions.

5. Look for Data Security, Privacy, and Compliance Issues

Beginning of June 2023, the sensitive data of 8.8 million Zacks Investment Research’s customers (e.g., email addresses, unsalted SHA256 passwords, and usernames) was published on the dark web. 

This is just one example of data breaches that have occurred (so far) this year. For organizations, having secure code has become so important that 37% of developers list testing applications for security issues among their key responsibilities. You can have the best code ever, but if it isn’t secure, all the effort and time you invest will be all for nothing.

OK, some security procedures should already be part of your secure software development life cycle (SSDLC) and your CI/CD pipeline; however, everyone makes mistakes. Want to spot the issues that have gone unnoticed? Include security, privacy, and regulations compliance checks in your code review checklist. Step into an attacker’s shoes and find answers to questions like:

  • Did the developer sign the code with a code signing certificate issued by a trusted certificate authority (CA), or did they use a self-signed certificate instead? If they utilized the latter, don’t forget that such certificates are not secure for applications in production because they’re not trusted.
how a developer can sign his code with code signing
Image caption: This is how a developer can sign his code with a trusted code signing certificate to protect it from tampering and guarantee authenticity.
  • Are any credentials hard-coded into the code? In 2022, GitGuardian discovered 10 million new secrets in public GitHub commits. That’s a stunning 67% increase compared to 2021. To make things worse, nearly 12% of those exposed secrets were private keys. Imagine what an attacker could do if he could get hold of one of your developer’s private keys… The damage would be immense.
  • Is the code compliant with industry or regional privacy and security regulations? Samples of such regulations and laws include the European Union’s General Data Protection Regulation (GDPR), the California Consumer Privacy Act of 2018 (CCPA), and the Payment Card Industry Data Security Standard (PCI DSS).
  • Are all types of sensitive data (e.g., user data, credit card information, passwords) securely handled and stored? Just as an example, think about Zacks Investment Research’s data breach we just mentioned. Are you storing password hashes that are properly salted and peppered instead of plaintext secrets?
  • Are there security measures in place to prevent attacks? For instance, are you using input sanitization and validation to help prevent cross-site scripting (XSS) or SQL injection attacks (i.e., malicious codes injected into an application or an SQL query)?
  • Is the data retrieved from external APIs or third-party libraries properly validated? Checking if their values are acceptable (i.e., correct) is another effective method to protect the application from attacks.

Pro tip: Explore our guide to OWASP secure coding practices checklist for more guidance and suggestions.

6. Asses the Code’s Grade of Reusability

Do you “upcycle” instead of just throwing things away? I do, and I apply the same concept when writing code as well. Why? Because recycling speeds up development, saves money, and reduces the risk of introducing new vulnerabilities into your products.

This is also one of the reasons why low code platforms, projected to reach a revenue of over $12 million by 2024, are based on the reusability concept. Code easily, faster, and with greater security. What could an organization want more?

Look into the level of reusability of the code you’re reviewing:

  • Is there any similar functionality elsewhere that can be reused?
  • If there is one, why hasn’t it been applied in this case?
  • Are functions and classes generic enough so they can be reused later?

Pro tip: Suggest your developers use constants instead of single values to increase code reusability.

power of constants
Image caption: Leverage the power of constants to write clearer and more reusable code.

7. Figure Out the Code’s Scalability and Reliability

Once your application is released, what’s the likelihood that no one will request a change or a new feature? None, zero, nada. On the other hand, the probability that something in the application will fail sooner or later is high. A request returning an error, an asset not loading properly — regardless of which issue occurs, something inevitably goes wrong all of the time.

But, if the code behind the application is scalable and reliable enough (i.e., it’s fault tolerant), changes will be relatively easy to implement. In case of errors, the impact on users will be as limited as possible.

Your code review checklist should therefore cover questions such as:

  • Has the code been written on the assumption that it’ll be changed or will have failures in the future?
  • Does the code support a larger user base or data? Let’s say you built an internal web application that’s used by an organization in the U.S. One day, the company expands and opens new offices in France and Germany. Would you be able to give access to it to all new employees, and support two new languages without changing the whole application?  
  • What will it happen if high-traffic requests hit the application due to a DDoS Attack?
how ddos attack can make an application unavailable
Image caption: The graphic shows how a DDoS attack can make an application unavailable to legit traffic.
  • Will the code work even if, for example, the SQL database behind would be offline?
  • What about if you had to change some given parameters — would the code display an error message?

And talking about errors, how are these going to be handled? Let’s see a few sample questions on error handling to add to your code review checklist.

8. Find Out About Error Handling

One of my friends has a bad habit. Whenever he hits the submit button in an application and it doesn’t immediately react, he keeps on hitting it frantically until either it works or he receives an error message. Yeah, he’s one of those people… but he’s not alone; I bet many people do the same when they get frustrated.

Now imagine that this is your software. I’m fairly certain you didn’t think to verify how the code you’re reviewing would handle this kind of issue. There are so many error-handling scenarios that it would be virtually impossible to consider them all. However, there are key questions that can help you spot most of them.

  • Are error messages user-friendly yet generic enough to protect your application from attacks? Consider the typical example error: “The username you’ve just entered doesn’t exist.” The user will immediately understand what they did wrong; however, you’ve also just revealed to a potential attacker that the username they tested during a dictionary attack (i.e., the cybercriminal tries all common words in the dictionary to find the right credentials) doesn’t exist in your database. Thanks for the help, mate.
  • Are events logged and stored long enough to allow debugging and security investigations in case of incidents? Let’ssay your application falls prey to a cyber attack. How are you going to be able to identify the root cause if the logs related to the attack are gone? To be on the safe side, keep log records for at least six months. Be aware though that some specific regulations like the PCI Data security Standards (PCI DSS) may require you to store them for longer periods.
  • Is this update ensuring that saved logs won’t display sensitive information (e.g., credentials, path names, banking information) that could lead to a data breach? An unsafe script error could reveal the whole path to the database where users’ credentials are stored. An error log could include the customer’s name and credit card number. Dig deeper in this issue, and uncover a few examples in MITRE’s Common Weakness Enumeration (CWE)-532
  • If the debugging information was accidentally exposed in production, could an attacker identify potential vulnerabilities or ‘open doors’ in the system? Did you release the application and forget to remove the debugging code? D’oh. An attacker could obtain your database password via a debugging information like highlighted in CVE-2004-2268. 

Pro tip: Analyze the code by comparing it with the use cases described in the OWASP error handling cheat sheet

9. Review Code Test Coverage and Quality

Do you think that tests aren’t your business and, therefore, you haven’t included a test analysis in your code review checklist until now? It’s time to change this mindset. Just because the code passed all the tests doesn’t mean that those tests were good or that the code is perfect.

Did your team use bots in the testing process like 53% of developers interviewed by GitLab in 2023? While this is  a good practice, remember that automation doesn’t mean perfect. It just means that it’s automatically testing for set criteria. What if a test was so standardized that it didn’t cover everything it was supposed to? What if it passed for the wrong reasons or wasn’t updated to reflect those specific changes?

Add a fundamental step to your code review checklist and ask:

  • Did you find any test that was specifically created for the actual code change to cover the requirements?
  • Is the quality assurance (QA) process used also including unit, integration, and system tests?
  • Are all tests following standards and best practices?
  • Are there any test cases that are missing or too generic? Sometimes, we focus so much on checking performance and bugs that we forget about security. Ensure that there are some tests addressing the most common security issues (e.g., can users access certain areas of the application without authenticating?).

Pro tip: Consider tests like code. They should also be easy to read, maintainable, and effective. If they’re too complex to be understandable, they probably aren’t good enough. Instead of pinpointing bugs, they could end up adding to your tech debt.

10. Find and Analyze the Documentation Available

You usually get the importance of documentation when a developer leaves the company. That’s when the poor fellas left in the team have to try to understand the ins and outs of the codes he wrote. If the documentation he left behind is poor, outdated, or simply inexistent, they’re in for a rough ride.

The last time it happened to my team, it took us months to figure it all out and, in some cases, we even had to scrap some applications and re-write them from scratch. And that ain’t funny, believe me. Luckily enough, 53% of developers surveyed by Zeroheight think that documentation helps their colleagues do their job with confidence. To play safe though:

  • Look for the ReadMe file. If this is a new project, is there one explaining the why and the how? In case new features are being added to an already existing application, has the file been revised to reflect the changes?
  • What about the configuration and other documentation information? Are they all up to date?
  • Is the documentation easy to understand? Can your non-technical colleagues figure out what it’s all about? If it practically takes a cipher key to decipher, take another stab at reworking your resource documents.

Pro tip: High-quality documentation is essential for smooth maintenance. Ensure best practices are followed and that the APIs defined in the code change are also well documented.

Among the 10 essential items we’ve just described, what are the ones that you’re definitely going to add to your code review checklist? What? You don’t use a checklist? Uh-oh! “I taut I taw a problem!” like Looney Tunes Tweety Bird may say. Let’s find out why you definitely need one.

Why Do You Need a Code Review Checklist?

Verizon 2023 Data Breach Investigation Report shows that more than 32% of all Log4j vulnerability scanning (i.e., malware that attackers use to get control of servers) happened within the first month after release. Today’s new threats are acting fast and exploiting vulnerabilities on a massive scale in a matter of days.

High-quality code must not only be easy to understand and modify, but it also must be as secure as possible. How can developer teams ensure that the code they’ve just written fulfills all those expectations when they’re urged to produce software as fast as lighting? This is where code review checklists come to the rescue.

A good code review checklist will:

  • Create a structured and standardized approach to your review. Goodbye, guts feelings, where everyone is using different processes. Welcome methodical, sleek, and predetermined questions to follow step by step. This approach prevents you from comparing code against personal preferences instead of standards, adds consistency to your work, and helps to avoid confusion.
  • Reduce costs. How? It’s easy. Don’t forget anything that could end up leaving undiscovered vulnerabilities, bugs, and/or mistakes. This could become costly to fix once in production.
  • Focus the attention where it matters (e.g., security, quality, and performance). Did you know that from 2020 to 2023, software supply chain attacks have increased on average by 742% year on year? A good code review checklist will help you concentrate your efforts on what counts the most so that the final result will be highly secure, top-quality, performant software.

At the end of the day, reviewing code is a bit like reviewing an article or a book. The key to success?

  • Ask the right questions.
  • Be methodical and organized with the support of a checklist.
  • Follow industry standards.
  • Focus on what matters.

You’ll make your customers happy and protect the publisher’s reputation. Ready to create a stellar code review checklist? It’s your turn now!

Final Thoughts on 10 Essentials Your Code Review Checklist Should Cover

Doing code reviews without a well-structured checklist is like playing darts while wearing a blindfold. With luck, you’ll hit something, but you’ll need more than luck to get the bullseye.

To really reap the benefits of the time invested in code reviews:

  • Focus on security and data privacy issues.
  • Check the five “abilities” of the code (i.e., readability, maintainability, reliability, scalability, and reusability).
  • Don’t forget about documentation.

Using a code review checklist will help you catch bugs earlier in the development process, avoid common security gaffs, and improve the overall code quality of your code and end product. So, what do you think? Isn’t worth boosting your code review checklist so that it covers the essential points you’ve just explored?  

The post 10 Essentials Your Code Review Checklist Should Cover appeared first on Code Signing Store.

]]>
A Guide to OWASP’s Secure Coding Practices Checklist https://dev.codesigningstore.com/owasps-secure-coding-practices-checklist Wed, 28 Jun 2023 05:46:29 +0000 https://codesigningstore.com/?p=437129 In 2022, 33% of newly discovered vulnerabilities were flagged as critical or high. Explore OWASP’s secure coding practice checklist and learn how to leverage its power to boost your threat protection and reduce attack risks Digitalization is both a blessing and a curse for organizations. From automation to fantastic new technologies and revenue streams, the… Continue reading A Guide to OWASP’s Secure Coding Practices Checklist

The post A Guide to OWASP’s Secure Coding Practices Checklist appeared first on Code Signing Store.

]]>
In 2022, 33% of newly discovered vulnerabilities were flagged as critical or high. Explore OWASP’s secure coding practice checklist and learn how to leverage its power to boost your threat protection and reduce attack risks

Digitalization is both a blessing and a curse for organizations. From automation to fantastic new technologies and revenue streams, the opportunities offered by going digital are seemingly endless.

But, like everything else in the universe, where there’s a yin, there’s also a yang. The more digital technology you implement, the bigger your attack surface grows. And how do you mitigate the risk of a cybersecurity incident when in 2022, the top 10 vulnerabilities and exposures (CVEs) identified were found unpatched at least 12 million times?

The OWASP secure coding practices checklist is a useful set of prevention techniques. If integrated early into your software development process, these secure coding practices can tremendously boost the security of your applications, organization, and customers.

It’s a long list, though, so we won’t go through every checklist item. Instead, to save you time, we’ve picked what we think are the best secure coding practices in the checklist based on their:

  • Scalability,
  • Effectiveness, and
  • Easiness of implementation.

What Is the OWASP Secure Coding Practices Checklist?

The Open Web Application Security Project (OWASP) secure coding practices checklist is a collection of coding techniques aimed to ensure that developers create code that:

  • Meets the highest security standards.
  • Prevents and minimizes security vulnerabilities.
  • Reduces the cost of bug and vulnerability fixes by enabling you to catch them earlier in the secure software development life cycle (SSDLC). 

Why do you need it? Before I start work every morning, I check the latest cybersecurity news and articles. I’ve been doing this for years, and guess what? I can’t recall a day without finding at least one vulnerability-related article making headlines. And those alerting about web application flaws are the most common ones.

Microsoft alone hit the jackpot in 2022, reaching a total of 1,292 vulnerabilities, according to data from Beyond Trust. That’s a new record high in a decade. Even the latest Verizon 2023 Data breaches investigation report (DBIR) shows basic web application attacks, representing one-quarter of all analyzed breaches, ranking among the top attack or breach patterns identified across all industries.

But why can’t you just agree on some best practices and follow them? No one says you can’t. But without a checklist or some other document, how would you know you didn’t forget to implement one of those best practices during development?

This is where the OWASP secure coding practices checklist comes in. Let me explain it with a real-life example. Have you ever had the chance to peek into the cockpit when boarding a flight? If you had, you may have noticed that the pilots go through one or more mandatory written checklists before taking off.

Why do they use them? Because no matter how experienced the pilots are, missing a step due to lack of concentration or too much self-confidence is easier than you think. Checklists help prevent aircraft accidents by ensuring no key step is left out.

The secure coding practices checklist does the same for software development security. It’ll help you ensure that every single agreed security requirement will be implemented at the right time. This way, you won’t have to go back and apply it just before release or deal with the consequences after the worst has happened.

A Closer Look at the Latest OWASP Secure Coding Practices Checklist

Now, the OWASP secure coding practices checklist is a 17-page document. It includes a collection of general methods that organizations can use to build secure software and protect their systems, applications, and customers from attacks and data breaches.

Do you really have to implement all of them? Ideally, yes, but you can also start by picking and choosing only the ones that best fit your situation. We’ve selected a few for you — let’s check them out one by one. Looking for an overview of the OWASP secure coding practices checklist? We’ve got you covered.

OWASP Secure Coding Practices Checklist CategoriesChecklist Items
1. Input Validation
  • Automatically check all data provided by the client before processing them.
  • Validate data based on specific parameters.
  • Classify and identify data sources (e.g., trusted and untrusted).
  • Validate data from untrusted sources.
  • Transform untrusted data into a standard format (i.e., canonicalization) to mitigate the risk of being exploited for attacks.
2. Output Encoding
  • Ensure the output encoding is safe for all of your target systems.
  • Contextually sanitize (i.e., eliminate unsafe characters or data from) all outputs of untrusted data to queries for LDAP, SQL, and XML.
  • Convert HTML, JavaScript, and CSS external outputs into harmless scripts.
  • Conduct all output encoding on a trusted system.
3. Authentication and Password Management
  • Save only salted password hashes in your credential store instead of plaintext passwords.
  • Enforce password complexity and length requirements established by policy or regulation.
  • Avoid using failure responses that indicate which part of the authentication data was incorrect.
  • Use HTTP POST requests (instead of GET) to transmit authentication credentials.
  • Only send non-temporary passwords over an encrypted connection or as encrypted data. 
4. Session Management
  • Disable concurrent logins with the same user ID.
  • Enable session inactivity timeouts. Too long sessions without any user action could be exploited by attackers.
  • Provide a logout button on all authenticated pages.
  • When the user moves from an insecure HTTP page to a more secure HTTPS one, generate a new session identifier (e.g., token). Use HTTPS whenever possible. 
5. Access Control
  • Grant the least privilege possible to service accounts (e.g., databases, web servers) and those connecting to or from external systems.
  • Regularly check how accounts are being used and disable unused accounts.
  • Validate the permissions of every single request. Only authorized users should have access to sensitive files and resources (e.g., web pages, databases).
6. Cryptographic Practices
  • Protect your cryptographic keys and other secrets from unauthorized access.
  • Use cryptographic modules that are compliant with FIPS 140-2 or an equivalent standard. 
  • Establish and enforce a set of rules for securely managing your organization’s cryptographic keys. 
7. Error Handling and Logging
  • Use error handlers that don’t display debugging or stack trace information.
  • Keep error messages as generic as possible and use custom error pages to limit the leak of sensitive information.
  • Log all authentication attempts, including failures.
  • Assure that your logs haven’t been modified by using unique identifiers that ensure data integrity (i.e., hash files).
8. Data Protection
  • Encrypt all sensitive stored data, such as authentication verification information everywhere, including on the server side.
  • Don’t allow users to download your application’ source code.
  • Disable auto-complete features on forms expected to contain sensitive information, including authentication.
  • Don’t store passwords, connection information, or other sensitive data in clear text (or in any insecure manner).
9. Communication Security
  • Prevent failed TLS connections from downgrading to insecure connections.
  • TLS certificates should be valid and have the correct domain name, not be expired, and be installed with intermediate certificates when required.
  • Specify character encodings for all connections.
  • Utilize TLS connections for all content requiring authenticated access and for transmitting all other sensitive information.
10. System Configuration
  • Implement an asset management system, and use a software bill of materials (SBOM) to list all of your system components and software.
  • Isolate development environments from production and provide access only to authorized groups.
  • Turn off the directory listing.
  • Keep servers, frameworks, and system components up to date and patched.
11. Database Security
  • Use secure credentials for database access.
  • Don’t use default database passwords.
  • The application should use the lowest possible level of privilege when accessing the database.
  • Deactivate database functionalities that are unused or insecure.
12. File Management
  • Scan user-uploaded files for viruses and malware.
  • The uploaded files validation process should check file headers instead of easily replaceable file extensions.
  • Utilize whitelists to enumerate files names and types that are allowed to be uploaded.
13. Memory Management
  • Prevent dangerous script execution by applying strict input and output checks and rules.
  • Replace known vulnerable functions with safer ones (e.g., substitute the unsafe strcpy with the safer strlcpy or strcpy_s).
  • When available, prefer data structures that can’t be run (i.e., use non-executable stacks) to executable ones.
  • Check that the number of bytes to be written or read fits in the buffer. Otherwise, an attacker might exploit the data overflow to force the program to behave in a malicious or dangerous way.
14. General Coding Practices
  • Protect the integrity of code, executables and configuration codes with unique identifiers (e.g.,  checksums or hashes).
  • Prefer use of tested and approved managed code (i.e., running under the control of common language runtime – CLR) for common tasks instead of new, insecure, unmanaged code (i.e., executed directly by the operating system).
  • Review all secondary applications, third-party code, and libraries to determine business necessity and validate safe functionality.
  • Secure database updates by using encrypted connections. 

Protect Your Software or Code With a Code Signing Certificate

Protect your software from tampering and build trust with your users by obtaining a code signing certificate. Sign your code with a digital signature that verifies your identity and assures users that your software is safe.

1. Input Validation

Websites and applications often require user input to complete specific actions. For example:

  • If you want to subscribe to a newsletter, you’ll have to enter your email address.
  • When you’re looking to buy something online, you’ll have to fill in your payment details.
  • If you try to access a web application or service, you won’t go anywhere without first entering your login credentials.

But if users can provide inputs, then so can cybercriminals. So, how do you guarantee that bad guys won’t exploit those fields to inject malicious code that enables them to steal sensitive data (i.e., passwords or credit card numbers), cookies, or session tokens?

The input validation (i.e., data validation) techniques listed below are excellent ways to check users’ and/or applications’ inputs for invalid or suspicious entries that could lead to code injection, obfuscation, and cross-site scripting (XSS) attacks.

  • Validate all data provided by the client before processing it. You can do this using an automatic process.
  • Validate all data based on parameters. Examples include data type, range, and length (e.g., determine a minimum and maximum length).
  • Classify and identify data sources clearly. You can do this by dividing them into trusted and untrusted (e.g., databases, uploaded files).
  • Validate data from untrusted sources. Everything that’s coming from databases, file streams, and external sources should go through this validation process.
sql injection attack exploiting
Image caption: Without proper input validation, online forms are vulnerable to SQL injection attacks.
  • Utilize canonicalization to address obfuscation attacks. In simple terms, transform untrusted data into a simpler, unambiguous form that can’t be misrepresented.
data canonicalization practical examples
Image caption: The graphic shows how canonicalization simplifies strings and an example of how to use it to validate user-based input.

Hungry for more samples and methods? Explore the OWASP Input Validation Cheat Sheet.

2. Output Encoding

Let’s say an attacker manages to inject malicious code into your online customer’s registration form. If executed, the sensitive data entered by the customer will be redirected to the cybercriminal. How do you prevent it?

There are several methods to protect your application and users from this type of XSS attack. These listed below are some of the most effective:

  • Sanitize all output of untrusted data to operating system commands. For example, eliminate dangerous tags and attributes, or replace them with safe values.
  • Ensure the output encoding is safe for all target systems. This way all encoded outputs will never be interpreted as code but only as text.
  • Contextually sanitize all output of untrusted data to queries for SQL, XML, and LDAP. Understand the context of the data and select the right encoding method based on that. Use existing libraries, if available; it’ll prevent mistakes and it’ll be faster and easier to implement.
  • Contextually encode all output data sent from external sources to the client. Once again, sources like file streams or external sources are included in the untrusted category.
  • Conduct all output encoding on a trusted system. Basically, use a trusted system to translate your output data into a non-dangerous format to help prevent XSS attacks. This should be done server-side only, not client side, using a well-protected server.

Uncover additional output encoding suggestions by reading OWASP’s Cross-Site Scripting Prevention Cheat Sheet and check out GitHub HTMLRuleSanitizer or OWASP Java HTML Sanitizer for HTML sanitization.

3. Authentication and Password Management

Did you know stolen credentials were the most common attack method in 2022? They accounted for 90% of breaches analyzed by the previously mentioned Verizon 2023 DBIR report. Between 2016 and 2022, ReliaQuest reports a stunning 24 billion usernames and passwords were compromised!

Protect the main door to your web applications by implementing the following:

  • If your application manages a credential store, use cryptographically strong one-way salted hashes. Storing only salted (and peppered) password hashes deriving from strong algorithms (e.g., SHA-256) instead of saving them as plain text. This way even if a hacker gets hold of the password hashes, he won’t be able to use them. 
how to safely store your passwords in database
Image caption: The graphic shows the best way to safely store your passwords.
  • Enforce password complexity and length requirements established by policy or regulation. Require the use of unique, long and complex (i.e., alphanumeric characters, capital letters, and symbols) passwords. Check the National Institute of Standards and Technology’s (NIST) password guidelines for useful password recommendations.
  • Avoid using failure responses that indicate which part of the authentication data was incorrect. ‘Invalid username’ or ‘The user doesn’t exist’ are not secure responses because it tells an attacker which specific info was wrong so they can try again. Opt for the vague ‘Invalid username and/or password’ message instead to make their job harder.
  • Use HTTP POST requests (instead of GET) to transmit authentication credentials. Why is the POST approach more secure than GET? Because with POST, the credential information is stored in the request’s body instead of being displayed in the URL as URL query parameters (which makes GET requests visible to everyone).
difference between insecre get and secure post
Image caption: Attackers are able to view all sensitive information included in GET requests. This doesn’t happen with POST requests, as this info isn’t stored in the server logs.
  • Only send non-temporary passwords over an encrypted connection or as encrypted data. Passwords are sensitive data, and like all sensitive data should always be encrypted, no matter if they’re in transit or at rest (i.e., stored in a database).

Get access to additional recommendations by browsing the information available in the OWASP Authentication Cheat Sheet.

4. Session Management

Have you ever noticed that when you log in to your bank’s website, your login session is terminated after a specific timeframe? On mine, there’s even a funky countdown. Why? It’s a common way to protect you from breaches and session hijacking. And it’s also part of the industry’s most secure coding practices — OWASP included.

What about you? How do you handle users’ requests to a service or web application? Check out these highly scalable solutions:

  • Don’t allow concurrent log in attempts with the same user ID. Enforce one log in (session) for each user ID. That’s it.
  • Establish a session inactivity timeout that is as short as possible. In other words, try to limit how long a session remains idle before it’s automatically terminated by the server in a way that’ll balance risks and business functional requirements. I know it can be annoying for users to be kicked out of a system, but it’ll protect organizations from attackers trying to exploit idle, authenticated sessions.
  • Logout functionality should fully terminate the associated session or connection. When a user clicks on the ‘logout’ button, they must be logged out completely. If this isn’t the case, it’s time to make changes.
  • Generate a new session identifier if the connection security changes from HTTP to HTTPS. Why? Because HTTP is insecure and prone to man-in-the-middle (MITM) attacks. Think about the authentication process. If the identifier remains the same when the connection switches from HTTP to HTTPS, a cybercriminal could intercept and use it to access password-protected areas. 
effects of keeping the same session id
Image caption: The graphic shows the effects of keeping the same session ID even when the connection protocol changes.

Manage your sessions like a pro. Find out additional tips in the OWASP Session Management Cheat Sheet.

5. Access Control

Do you remember the Cambridge Analytica scandal that fined Facebook $5 million? Let me refresh your memory. In 2018, the consulting company Cambridge Analytica gained access to millions of users’ personal information. They did this by exploiting a broken access control vulnerability in Facebook’s application programming interface (API) that allowed any third-party developer access to sensitive user data.

Don’t risk letting everyone on this planet access to your most valuable assets — add the following to your secure coding practices checklist:

  • Grant the least privilege possible to service accounts and those connecting to and from external systems. How? Apply the principle of least privilege so that users get access only to what they need to do their work.
  • Implement account auditing and enforce the disabling of unused accounts. To avoid issues, do it regularly and often, not only when a colleague leaves the company. People change roles all the time, and so should their permissions.
  • Enforce authorization controls on every request, including those made by server-side scripts. Do you need to allow long sessions? Don’t forget to periodically re-validate the authorization.
  • Restrict access to files or other resources to only authorized users. The same goes for access to protected URLs, functions, and files or resources outside the application’s direct control.
  • Limit the number of transactions a single user or device can perform in a given time. Keep the limit low enough to deter automated attacks but above the actual business requirements. For example, automatically lock an account after a user has entered an incorrect username or password three times in a row (in a specified number of seconds).

Did you know that broken access control is the number one web application security risk in the latest OWASP top 10 list? Want to learn more? A deep dive into this issue will help you ramp up your tactics of defense.

6. Cryptographic Practices

In 2018, the hotel chain Marriott was a victim of a data breach that exposed more than 5 million unencrypted passport numbers. As a result, the company had to cover the costs of new passports for the affected customers requesting them and fork out at least $3.5 million in data breach expenses and legal fees.

Cryptographic keys (i.e., private and public keys) used in conjunction with algorithms and public key infrastructure (PKI) digital certificates will protect your sensitive data at rest (e.g., stored in databases) and in transit (i.e., sent from one device to another) against tampering and snooping. Using cryptographic processes and tools is like wrapping your data with a protective layer that makes it unreadable and virtually impossible to modify (so long as you follow secure key management and certificate best practices). Therefore:

Why should you do it? Because cryptographic failures is the second most dangerous category risk in the OWASP top 10 list. And get it right; it’s so crucial that even NIST published a document about recommended cryptographic and encryption standards.

7. Error Handling and Logging

Another interesting finding of the earlier mentioned Verizon DBIR is that 74% of breaches involve human elements (e.g., mistakes, misuse). And some of the mistakes developers make involve how their applications handle errors. We get it; finding the right solution can be tough sometimes. Here are a few secure coding practices from the checklist that can help:

  • Use error handlers that don’t display debugging or stack trace information. Doing otherwise will be like giving the combination of your safe to a thief.
  • Implement generic error messages and use custom error pages. Always remember, anything your users can see can be also seen by the bad guys. Make your error messages and pages as impenetrable as possible, and never incorporate sensitive information in error responses. (Pro tip: MITRE’s Common Weakness Enumeration (CWE)-209 shows a few examples and a list of improvements to protect your web applications by not giving away too much valuable information that attackers can use.)
  • Log all authentication attempts, especially failures. Be sure to log everything related to connection attempts with invalid or expired tokens, input validation failures, access control, potential tampering events, or security configuration changes.
  • Use a cryptographic hash function to validate the integrity of your log entries. While this isn’t necessarily a common approach, you could hash your logs to offer assurance that a log entry hasn’t been modified by an attacker.

8. Data Protection

Are your customers and organization’s sensitive data protected enough? Since it was established five years ago, the European Union’s General Data Protection Regulation (GDPR) issued a total of more than €4 billion in fines. The latest victim? Meta. It was slapped in May 2023 with a record fine of $1.2 billion.

Protecting data from being lost, compromised, altered, or stolen is essential for any organization. To do so without breaking the bank:

  • Use cryptography to store highly sensitive information, including server-side authentication verification data. Protect your credentials, email addresses, customers’ credit card numbers, and more using strong cryptographic algorithms.
  • Protect server-side source code from being downloaded by a user. Why should a user need to download such codes? Always remember: if something is not needed, it should be either deleted, deactivated, or restricted.
  • Disable auto-complete features on forms expected to contain sensitive information. Yes, auto-completing forms (including authentication forms) are cool and can save your users some time. However, not everything cool is also safe. Do without it. Better spending two more minutes filling in a form than hours fixing a data breach.
  • Don’t store passwords, connection strings, or other sensitive information in clear text or insecurely. Yup, no matter what type of sensitive information you store, cryptographic functions are your best bet to protect it against cybercriminals (especially client side). Make sure you pick the correct algorithm and your data will be out of harm’s way.
how ssl protects your customers from mitm
Image caption: Encrypting information in transit will also help you protect your customers and organizations from various attacks, including MitM.

Bonus: These simple but effective actions will also facilitate compliance with other privacy and data protection regulations required by the industry like the:

9. Communication Security

Encryption is a powerful ally in securing email communications and data transfers. If you’re still transmitting information via the unprotected hypertext transfer protocol (HTTP), you’re putting your customers and data at risk of MITM attacks.

Don’t follow in the footsteps of UC Browser, a popular Android web browser. In 2019, more than 500 million users were exposed to MITM attacks when downloading a package kit from an insecure channel. To avoid this, use a transport layer security (TLS) certificate to safeguard your data in transfer and ensure that:

  • Prevent failed TLS connections from downgrading to insecure connections. Want to protect your connections and data in transit from poisoning (i.e., attackers injecting false information into a system) and MITM attacks? Stay away from insecure and deprecated old protocols (e.g., SSL or TLS 1.1).
downgrade of failed tls connections
Image caption: Allowing the downgrade of failed TLS connections can put you and your customers at risk of data breaches.
  • Use active, valid TLS certificates that include intermediate certificates in their trust chains. Why? Have you ever seen the browser warning ‘Your connection is not private’ or ‘The connection is not secure’? Yup, that’s caused by an expired certificate. It happened to Pokemon Go back in 2018 and it was all over the news. You also want to ensure that the certificate has been issued by a trusted certificate authority (CA) to the correct domain name.
  • Specify character encodings for all connections. In other words, convert characters into a format good enough for transmission and storage.
  • Utilize TLS connections for all content requiring authenticated access and for sensitive information. This will help you add another layer of security to your data and shield them from prying eyes.

Want to know how secure your TLS protocol is? Test its configuration and more with Qualys SSL Server Test. It’s free, and you just need to enter your hostname.

10. System Configuration

Let’s go back for a moment to Verizon’s 2023 DBIR. One of the highlights shows that 19% of data breaches were caused by insider threats’ errors (i.e., unintentional security gaffs) and malicious misuses (i.e., intentional actions).

Incorrectly configuring your systems and/or applications can cost you dearly. To avoid the most dangerous mistakes, include in your checklist the following actions:

  • Implement an asset management system and register system components and software in it. Include a software bill of materials (SBOM), which is a complete list of system components (including third-party ones) and software in an application. It’ll help you keep track of vulnerabilities and updates.
  • Isolate your development environment from production and restrict access to it. Keeping your development environments isolated and granting access only to those who need it (e.g., developers and testers) are effective ways to keep your production code safe from prying eyes.
  • Turn off the directory listing. The list of the files and folders hosted on your web server should remain private. You don’t want to give attackers a detailed map of your server, right? 
  • Ensure servers, frameworks, and system components have all patches issued for the version in use. How can you do that without investing too much time? Do you remember when we talked about the SBOM? Time to put it to use now, and you’ll be done in a blink of an eye.

11. Database Security

Over 2.8 million — this is the number of the U.S. retailer SimpleTires’ customer records that were exposed and available for at least three weeks to anyone with an internet connection. How did it happen? The data was stored in an insecure database. It didn’t even require a password!

Shocking, huh? Now, ask yourself: How secure are your databases? Here’s how to provide them with an acceptable level of security that’ll preserve them from most attacks:

  • Use unique, secure credentials for database access. Strong passwords and the use of Multifactor authentication (MFA) should become the norm.
  • Remove or change all default database administrative passwords. Do you know how easy it is to find a default password for the most common applications? Just run a search on the internet. You’ll be amazed at how many entries you’ll find.
  • The application should use the lowest possible level of privilege when accessing the database. Why? It’s an effective way to minimize damage. In case an attacker manages to break into the application, the most important data in the database will be safe.
  • Turn off all unnecessary database functionality. Let’s declutter! Get rid of unused and vulnerable functions. The fewer functionalities you have, the less work you’ll have to do, and the more you’ll reduce the chances of an attacker breaking in.
add mfa to your secure coding practices checklist
Image caption: Add MFA to your secure coding practices checklist to protect your databases and applications from cybercriminals.

Pro tip: Want some extra peace of mind? Add some of our 11 top-rated database security best practices to your list.

12. File Management

In Q1 2023, information stealer malware (i.e., malicious software used by major hacking groups aiming to steal passwords, cookies, and credit card details)  increased by 22% compared to Q4 2022.

Keep your customers and applications safe from malware attacks:

  • Validate that uploaded files are the expected type by checking file headers rather than extensions. Remember that file extensions are much easier to rename than changing a file’s header.
  • Scan user-uploaded files for viruses and malware. The open-source malware scanner ClamAV is just one of the software programs available to do the job.
  • Use an ‘allow list’ of permitted file names and types when referencing existing files. The file name or extension doesn’t match your whitelist? That might be dangerous then.
file extension verification to your secure coding practices checklist
Image caption: Include file extension verification to your secure coding practices checklist to protect your applications from malware infections.

Is file security a major issue within your organization? OWASP has a cheat sheet with a plethora of suggestions to help you fix it once and for all.

13. Memory Management

Buffer overflow is one of the top 25 SANS CWE’s most dangerous software errors. Why? Because attacks based on buffer overflow (i.e., occurring when a program attempt to write more data into a memory that it can hold) enable cybercriminals to run malicious codes, crash programs, or corrupt data.

The following tips will help you to properly manage memory and avert memory-based attacks:

  • Utilize input and output controls for untrusted data. This will block any malicious input entered by an attacker.
  • Avoid the use of known vulnerable functions. Print, strcat, strcpy are all easy to exploit. The solution? Replace them with safer alternatives like snprint, strcat_s, and strcpy_s.
  • Use non-executables stacks, if available. It’ll shield your memory against malicious shell code injection and help prevent buffer overflow exploitation.  
  • Check buffer boundaries if calling the function in a loop and protect against overflow. Translate in simpler words, and check that the number of bytes to be written or read fits in the buffer to avoid overflow. Is it really so important? Well, it’s one of the root causes of the Heartbleed bug.

Pro tip: Memory vulnerabilities are dangerous. Nevertheless, they can be minimized also by using programming languages less likely to make applications susceptible to memory attacks as suggested in the U.S. National Security Agency’s (NSA) Software Memory Safety guide.

14. General Coding Practices

Yeah, you made it! You managed to get to the last point of the OWASP secure coding practices checklist. Well done! Before we wrap up, let’s have a look at a couple useful general coding tips included in the secure coding practices checklist:

  • Review all secondary applications, third-party code, and libraries to determine the business necessity and validate safe functionality. It’ll help you avoid introducing new vulnerabilities. When possible, use only signed third-party codes so that you can always check the validity of their signatures.   
  • Implement safe updating using encrypted channels. Encrypt the connection using a TLS certificate to keep attackers at bay.
  • Use checksums or hashes to verify the integrity of interpreted code, libraries, executables, and configuration files. You don’t know how to verify a checksum? Learn how to do it in Windows and Linux.
  • Use tested and approved managed code rather than creating new unmanaged code for common tasks. The managed code should be properly signed to allow you integrity, authenticity, and originality validation. It’ll guard your application against malware infection.

As we’ve learned, a single unpatched vulnerability can open the door to thousands of cybersecurity issues that could have severe consequences on your customers and organizations.

Looking for some expert-approved secure coding tips? Check out our secure coding best practices guide.

Final Thoughts on A Beginner’s Guide to the OWASP Secure Coding Practices Checklist

My grandma used to say, ”A stitch in time, saves nine.” The secure coding best practices you’ve just learned, if applied early in the SSDLC (long before your web application is released), will help you prevent the most common cyber attacks. A few quick takeaways include:

  • Always validate your data,
  • Protect your communications and codes with digital certificates, and
  • Secure your databases with multifactor authentication.

There are enough solutions for every situation and need. Select the ones you’re most comfortable with and start mitigating the risk of the most common vulnerabilities. Did you find this article useful? Top it up by reading our next article. A deep dive into the absolute essentials that your code review checklist should cover. Don’t miss it!

The post A Guide to OWASP’s Secure Coding Practices Checklist appeared first on Code Signing Store.

]]>
What Is a Software Development Strategy? https://dev.codesigningstore.com/what-is-a-software-development-strategy Tue, 20 Jun 2023 04:30:04 +0000 https://codesigningstore.com/?p=437086 PMI research shows that 35% of software development projects failed and suffered budget losses in 2020.  Looking for ways to change this trend, and make the grade? Learn what a software development strategy is and get access to a few best-in-class examples that’ll put you on the path to success. With our world becoming increasingly… Continue reading What Is a Software Development Strategy?

The post What Is a Software Development Strategy? appeared first on Code Signing Store.

]]>
PMI research shows that 35% of software development projects failed and suffered budget losses in 2020.  Looking for ways to change this trend, and make the grade? Learn what a software development strategy is and get access to a few best-in-class examples that’ll put you on the path to success.

With our world becoming increasingly digital, already established software companies are facing a new challenge: delivering new products at the speed of light without compromising quality. At the same time, software startups sprout like mushrooms. More organizations jump on the software development bandwagon — some without the knowledge necessary to succeed.

The results? Companies create low-quality products and struggle to stay afloat. And what were the costs related to this futile endeavor? $2.41 trillion in the U.S. alone.

Want to stay ahead of the curve and ensure that your teams always deliver top-notch products without sacrificing quality and security on the altar of speed? You can’t do that without a comprehensive software development strategy.

But what is a software development strategy, exactly? We’ll explore the answer to this crucial question before diving into why having this strategy is important. Then, we’ll explore a few examples of software development strategies that’ll transform your organization into a shimmering star in the tech firmament.

What Is a Software Development Strategy?

Strategy is not the consequence of planning, but the opposite: its starting point.” — Henry Mintzberg, Professor of management studies at McGill University, Montreal.

Yup, if you’re planning to develop a new application, you’ll have to start with creating a strategy before doing anything else. Why? Because successfully developing and releasing a winning software product can be an exciting adventure, but accomplishing this ain’t an easy task. The competition is high, and technology is changing fast. Winning customers’ attention and creating an application that’ll stand out from the crowd is a constant battle.

Therefore, software development strategy has turned into an essential part of the secure software development life cycle (SSDLC), enabling your development team to convert a simple idea into a product that:

  • Creates value for the users.
  • Meets your organization’s goals.
  • Enhances efficiency and security.

A software development strategy is a set of decisions and directions related to all activities associated with the life stages of the product that should align with your organization’s business strategy.

Think of it like a roadmap that guides software development teams and their products to the desired destination.

Is it really necessary? Let’s find it out.

Why Having a Well-Thought-Out Software Development Strategy Matters

I worked on software development projects for more than 21 years, and I have learned the hard way what a sloppy or non-existent software development strategy can do to a project.

When I started my product manager career, the first software development project I took over from a colleague made my hair curl in shock. Prior to me joining the company, the team had tried to complete it for more than four years without success. I was stunned. I couldn’t understand why key enhancements of a critical tool used by the company had never been released after all those years, money, and efforts put into it.

No wonder the teams were frustrated, and managers and team leaders didn’t even want to talk about it! I kept on investigating and, after a few chats with the people involved, I found the root cause of the problem: a lack of directions and coordination. In other words, the team was rudderless because they had lacked a decent strategy for four years.

So, what’s the first thing I did? I rolled up my sleeves, got together all the parties involved, and started working on a deeply needed software development strategy. A couple of workshops and a few meetings later, the strategy was ready to be shared with the teams. Fast forward six months, the project was finally successfully completed, and the new features were released.

What Software Development Strategies Do

It was a challenging start as a product manager, let me tell you; but after that experience, I’ve never again started a project without having a well-grounded software development strategy. In fact, along with helping you to deliver your products on time, having a decent strategy will also:

  • Help you mitigate risks and increase customer satisfaction. Including market research and regular testing into your strategy will let you identify potential issues and risks sooner. At the same time, it’ll provide you with enough information to create a product that nails your customers’ needs and expectations.
  • Keep costs down and increase your return on investment (ROI). A clear strategy will avoid costly delays and mistakes caused by misunderstandings or unclear goals and requirements. Cross-functional teams will work in sync in no time, and you’ll achieve a higher ROI.
  • Boost team morale and performance. Correctly allocate your resources and budget. Meeting project deadlines becomes a no-brainer when you know exactly which features you have to build, what skills or roles you need to fill, and when to carry out specific tasks. Your teams will be happier and more performant.
  • Increase the security of your products. Every business relationship is based on trust. And if your product isn’t secure enough to prevent your customers’ sensitive data from falling into the wrong hands, the trust they have in you is already compromised. Security is a fundamental part of a strong strategy that no organization can do without.

Be careful, though! Building a strategy just for the sake of it can be a dangerous game. Get your strategy right and you’ll thrive; get it wrong, and it may cost you dearly. If the latter and you’re lucky, it’ll just delay the time to release or, you’ll have to invest additional money. In the worst-case scenario, though, your application may end up being discontinued, and all efforts and money put into it will go down the drain.

“No way Jose’, this won’t happen to me,” you may say. Maybe you’re right. But we all make mistakes now and then. Even a big tech giant like Google had issues with some products it developed. Since 1997, the tech giant has laid to rest at least 285 tools. Why? Probably not all these failures were caused by a poor strategy nevertheless, an effective list of dos and don’ts (i.e., a software development strategy), will minimize the chances of fiasco, and guarantee you a smoother development process. 

Convinced? OK. Now that you know the rhyme and reason for having a software development strategy, why don’t you check out some shiny examples?

7 Examples of Effective Software Development Strategies

Looking for winning software development strategies? We’ve got seven to choose from.

Software Development StrategiesItems to Consider and Benefits
1. Define the Scope of Your Product
  • What you want to build,
  • What features you’re going to include,
  • What the deadlines and milestones are going to be,
  • What kind of documentation you’ll need,
  • Who is going to be responsible for what,
  • How much money you’ll have to invest (i.e., budget), and more.
2. Go Agile
  • Make your change management more efficient,
  • Minimize the time spent reworking the software,
  • Produce high-quality, error-free code,
  • Change the scope or course of the project on the fly, even during development.
3. Automate When You Can
  • Reduce human errors drastically,
  • Free up some of your developers’ time to let them focus on more important assignments,
  • Speed up development, and
  • Let you fix flaws “on the go.”
4. Prioritize Wisely
  • Avoid project chaos,
  • Use the feedback collected from early testers, and
  • Easily meet your business goals.
5. Put Security First
  • Protect your codes from unauthorized changes, malware infections, and data breaches,
  • Fix flaws faster, and
  • Never forget a patch or bug.
6. Manage Your Technical Debt
  • Avoid dangerous procrastination of fixes,
  • Shield your code from ransomware and other attacks,
  • Don’t lose control of your tech debt.
7. Leverage No-Code and Low-Code Platforms
  • Minimize manual coding,
  • Free up some of your developers’ time,
  • Develop state-of-the-art, scalable solutions, and
  • Effortlessly deliver continuous improvements patches, and new features.

1. Define the Scope of Your Product

During a project managers workshop I attended, the trainer asked those attending to draw a hypothetical clock that should become the next most wanted bedroom accessory. This was the only guidance he gave us.

Puzzled, everyone started drawing. After 15 minutes, he asked us to present our “masterpieces.” The first unveiled drawing was incomplete. Apparently, the author got lost in adding endless features and complicated gears. Another one represented a big, steel minimalistic wall clock. When my turn came, I introduced a small, old-school, 50’s looking light blue bedside table clock, while another guy created a bedside table clock incorporating a small coffee machine.

In the end, the trainer revealed: “I wanted a digital, sun-shaped, luxury bedside table clock with a radio. No one really did that. But I am not surprised. See what happens when you ask people to build something without explaining what you’re expecting to get?”

That’s when we understood the point of the exercise. It was a clever way to show us how important it is in software development to define things like:

  • What you want to build,
  • Why you want to build it,
  • What features you’re going to include,
  • What the deadlines and milestones are going to be,
  • What kind of documentation you’ll need,
  • Who is going to be responsible for tackling various tasks,
  • How much money you’ll have to invest (i.e., budget), and more.
four basic elements of the project scope
Image caption: The graphic shows the four basic elements of the project scope.

I bet that if the trainer had given us all this information beforehand, we would have probably all drawn very similar clocks and finished on time. So, the first lesson learned is: clearly define your product’s scope to avoid misunderstandings and delays.

2. Go Agile

Did you know that 69% of the respondents to the 2022 State of Agile survey confirmed that at least half of applications are delivered on time thanks to the Agile methodology’s implementation?

And it gets even better. The same survey shows that for 89% of the people interviewed agreed that Agile software development benefits not only the development teams but their organizations as a whole.

example of Agile software development methodology
Image caption: The graphic shows an example of Agile software development methodology, which starts with outlining all requirements in the planning stage.

Why should you incorporate Agile into your software development strategy? Because it has different deliverables (i.e., project outcomes) and timelines from the traditional (non-Agile) development process. The Agile process is:

  • Iterative. It’s repeated again and again to refine and improve the software based on the feedback received.
  • Divided into several sprints. Each chunk (i.e., sprint) is usually done and dusted in two to four weeks. A minimum viable product (MVP) incorporating the feedback received is released within two to four weeks.

This way, you’ll keep your project manageable, focus on what really matters, and gradually enhance the previous versions of the product.

Are you looking to:

  • Make your change management more efficient?
  • Minimize the time spent reworking the software based on feedback and identified issues?
  • Produce high-quality, error-free software?
  • Be able to change the scope or course of the project on the fly, even during development?

The Agile methodology is what you need. Want to know more about it? Check out the Agile Manifesto available on the Agile Alliance’s website.

3. Automate When You Can

According to a latest report, the lack of testing automation is the most frustrating challenge for software development teams. Why am I not surprised?! If you’ve worked in software development long enough, you’ll know very well how long it takes to manually prepare and run software tests, and why time and costs are the top concerns of manual testing.

I get it, not everything can be automated, and in some cases, you’ll still have to do things by hand. Nevertheless, replacing traditional manual tests with SAST (static application security testing) and DAST (dynamic application security testing) tools and automating repetitive tasks, will help you to:

  • Drastically reduce human errors,
  • Free up some of your developers’ time to let them focus on more important assignments,
  • Speed up development, and
  • Fix flaws on the go, thereby reducing the days of exposure to vulnerabilities by up to 32.6%.

Containerization (i.e., bundling an application and all its necessary dependencies in a single package) and Docker registries are other automation tools that you may want to add to your software development strategy. Using this approach may help you to:

  • Streamline the deployment, and
  • Simplify the management of highly complex systems.
structure of software containers
Image caption: The graphic shows the structure of software containers.

Ultimately, are you planning to shift-left security and implement secdevops (more on that in a moment)? If so, then automation is something you won’t be able to do without. 

4. Prioritize Wisely

Let’s go back for a minute to the time I was working as a product manager. Often, when people from other teams knew we were working on the development of a new product, many would inundate me with feature requests.

Believe me, now I know how the guy wearing Santa’s costume at the mall during the holidays feels when he’s “assaulted” by kids begging for presents or candies. Don’t get me wrong, it’s always great to know that there’s a huge interest in the software you’re working on. But no matter how eager you are to satisfy all requests, you simply can’t do that.

Want to avoid your project ending up in absolute chaos? Prioritize. Do you remember when we talked about MVP? Take that same approach by identifying specific criteria to ensure your strategy gives precedence to:

  • The feedback collected from those early testers,
  • From your users (e.g., through market research), and
  • To the features that help you meet your business goals.

I know, sometimes it’ll be challenging to say no to managers and your CEO, but it’ll be for the greater good. Because at the end of the day, if you want to sell your product, it’s your customers’ expectations you must satisfy.

Give it a try. When they’ll see those sales figures reach the sky, they’ll be happy, too.

5. Put Security First

A software development strategy isn’t complete if it doesn’t encompass security. Enterprises know it, and in 2022, 68% of them shifted security left in the software development process (i.e., secdevops) to give some security responsibilities to the developers too.

Why? Because in the digital world, software is never secure enough. In the first three months of 2023, 6,977 new vulnerabilities were identified  (i.e., 11% more than in Q4 2022), and  33% of full stack exposures discovered were critical or high severity.

Hence, most software development strategies incorporate, among others security initiatives:

  • Signing your code, containers, software, etc. Enforce the use of code signing certificates issued by a trusted certificate authority (CA) to sign your codes during the whole development process life cycle. It’ll protect your organization and customers from malware infection and data breaches caused by code tampering
  • Effectively manage vulnerabilities and security issues. Ensure your teams are always up to date with the latest software vulnerabilities and use automation for testing and patch management. It’ll keep your code more secure and let you fix issues faster.
  • Software security checklists. How can you be sure you didn’t forget to install a fix or check a component before releasing your new application? Use a software security checklist and you’re done.
  • Security best practices. Follow a list of  security-related best practices (e.g., safely storing your code signing certificates and keys). Taking this approach will increase collaboration and the security of your products.
signing your code early in the ssdlc
Image caption: Start signing your code early in the SSDLC to keep your software and organization safe from malicious attacks.

6. Manage Your Technical Debt

How many times in your latest software projects have you chosen speed over quality and security, or had to cut corners to deliver the product on time? Don’t be ashamed; we’ve all been there. In fact, 74% of the companies surveyed by Invicti in 2022 admitted to knowingly releasing software with unmitigated vulnerabilities.

Procrastinated, unfixed bugs are what make your tech debt grow. But, if nearly everybody has some form of technical debt, why should you even consider it when building your software development strategy? Because if it isn’t kept to a minimum and properly managed (i.e., the accumulated issues are never addressed and keep on growing exponentially), it’ll eventually spin out of control. Just like unpaid debts grow due to mounting interest.

The implications? Your software becomes less secure; thus, more vulnerable to malware infections and data breaches. For instance, the recent LockBit ransomware attack suffered by a dental care provider, Managed Care of North America (MCNA Dental) exposed a whopping 9 million U.S. dental patients’ data.  

I bet you wouldn’t like being in their shoes. To avoid this, after pinpointing the root causes of your technical debt, create a strategy around it to effectively address it, little by little. For example:

  • Implement security as a code (SaC). This will help to embed security checks and processes in your SDLC.
  • Invest in technical and security training. Ensure your teams understand the consequences of releasing insecure code (e.g., vulnerable, unsigned software). 
  • Follow security best practices. This will help protect your organization and customers’ sensitive data from potentially devastating breaches. 
  • Leverage the power of bi-weekly Agile retrospectives. This approach will help you understand what you did well, what you need to improve, and how.
key questions to answer during a retrospective meeting
Image caption: The graphic shows the key questions to answer during a retrospective meeting.

Want to uncover more tech debt causes and solutions to create a stellar software development strategy? Check out our latest article on technical debt. 

7. Leverage No-Code and Low-Code Platforms

Wouldn’t it be marvelous if you could develop and launch a secure, high-quality application in a matter of days? No-code and low-code application development platforms can make this a reality with their intuitive, drag-and-drop interfaces.

Low-code application development technologies are becoming such a hit that their worldwide market is estimated by Gartner to reach an impressive $31.9 billion by 2024. Several enterprises are including them in their software development strategies to:

  • Minimize manual coding,
  • Free up time for their developers to focus on quality, security, and more complex projects,
  • Develop state-of-the-art, scalable solutions without incurring high costs, and
  • Effortlessly deliver continuous improvements patches and new features to continuously adapt their products to meet customers’ needs.

Isn’t this a great action item to incorporate into your software development strategy?

Ta-da! You’ve just uncovered seven top-scoring examples of software development strategies. Now, it’s time to put into practice what you’ve learned so far. Make your choices, be different, and create your strategy.

Final Thoughts on What a Software Development Strategy Is

Now that you have a better idea about what a software development strategy is, it’s time to start building one. It’ll help you enhance the quality of your software while decreasing the time spent building it.

Ensure you follow an agile approach, automate monotonous tasks, prioritize security, and reduce your technical debt. It might take some time; however, with a flawless development strategy in place, you’ll start seeing the benefits of it.

Your team productivity will improve, your customer satisfaction level will increase and, consequently, your sales will grow. C’mon, getting those products on the market when your customers want them, and how they want them, has never been easier now that you nailed the right software development strategy.

The post What Is a Software Development Strategy? appeared first on Code Signing Store.

]]>
Tutorial: How to Check the Digital Signature of a File (in Linux and Windows) https://dev.codesigningstore.com/how-to-check-digital-signature-of-a-file-in-linux-windows Mon, 19 Jun 2023 13:15:59 +0000 https://codesigningstore.com/?p=437060 Did you just download a file or a program from your favorite website? How do you know that it’s safe? Explore how to check file signatures to verify if your file has been hijacked since it was signed    In its latest report, SpyCloud identified more than 22 million devices infected by malware in 2022… Continue reading Tutorial: How to Check the Digital Signature of a File (in Linux and Windows)

The post Tutorial: How to Check the Digital Signature of a File (in Linux and Windows) appeared first on Code Signing Store.

]]>
Did you just download a file or a program from your favorite website? How do you know that it’s safe? Explore how to check file signatures to verify if your file has been hijacked since it was signed   

In its latest report, SpyCloud identified more than 22 million devices infected by malware in 2022 alone. How did cybercriminals manage to infect so many devices? SEO poisoning (i.e., search engine optimization poisoning) was one of the common malware distribution vectors used by attackers.

With this technique, attackers exploit Google Ads campaigns to promote the download of infected files and apps through phony websites. Knowing this, it shouldn’t come as a surprise to know that 43% of CISOs interviewed Red Access consider “browsing threats” their top concern for 2023. 

So, how can you or your customers ensure that software programs and updates are safe, and haven’t been modified? By checking their digital signatures (i.e., blocks of cryptographic data that are used to validate the origins, authenticity, and integrity of files). In this tutorial, we’ll show you how to verify file signatures both in Linux and Windows, so that what you download is always the real deal. Ready to ramp up the security of your software downloads? Let’s get started.

How to Check if a File Is Signed in Windows and Linux  

67% of organizations interviewed by Fortinet have been targeted by ransomware attacks at least once in 2023, and 65% of the victims were unable to completely recover their data.

Cybercriminals are getting sneaky and spreading malware in every possible way. They’re con artists who exploit users’ trust in well-known brands like Microsoft OneNote and Adobe Acrobat Sign. How? By sending out malicious attachments to users to trick them into downloading and opening infected files. 

Verifying a file’s digital signature will help you protect your devices and/or organization from downloading and installing compromised code. How do you do it? Let’s break it down.

How to Check a Digital Signature of a File in Linux 

If you’re using Linux and you think that you’re immune to malware infections, you may be in for a shock. Elastic Security Lab revealed in its latest report that, more than 54% of malware infections in 2022 targeted Linux endpoints!

Yup. Linux might have been considered a safe haven a few decades ago but, the tide is changing rapidly.

This is why, every time I download a file, I don’t just verify the file’s checksum (i.e., a random cryptographic value used to validate the integrity of a file); I also check its digital signature.

How?

Let’s say you want to install software that isn’t available in Linux repositories, like for example, VeraCrypt, an open-source, multiplatform disk encryption tool. After you’ve downloaded the Linux package from the official website, it’s time to start the steps to check the file’s digital signature (VeraCrypt uses PGP and X.509 digital signatures).

Note: The steps indicated below will work for most signed software. The process may slightly vary in some exceptional cases, for example, when the public key and/or the PGP signature file (more on that in a moment) are stored elsewhere or are included in a bundle.

1. Check If Gnu Privacy Guard (i.e., GnuPG or GPG) Is Already Installed on Your System 

GnuPG is usually included in Ubuntu and other Linux operating systems; however, to play it safe, you may want to confirm it’s there. To do so:

  • Press Ctrl+Alt+T to open a terminal window.
  • Type “gpg –version” and then press enter.

If it displays the information about the version installed, you can move to the next step. If you get an error message (e.g., “command not found”), you’ll have to install it by typing the following commands in your terminal:

sudo apt-get update
sudo apt-get install gnupg
outcome of gpg
Image caption: The screenshot shows the outcome of gpg –version when GnuPG is installed.

2. Download the Publisher’s Public Key 

On the software download page, you’ll usually find a link to the publisher’s public key.

veracrypts link to the public key
Image caption: The screenshot shows VeraCrypt’s link to the public key.

To download it

  • Right-click on the link to copy it.
  • In the terminal type: “wget” followed by the link you’ve just copied.
  • Hit enter.
key has now been successfully downloaded
Image caption: This is how the command will look like. The key has now been successfully downloaded onto my machine.

3. Import the GPG Key

Now you can import the public key to your local keyring (i.e., a virtual keychain used by the operating system to safely store your keys).

  • In the terminal, navigate to the Download folder.
  • Type “gpg –import filename” into the commandline.
how you import the public key
Image caption: This is how you import the public key to your local keyring.

Before moving on, don’t forget to compare the downloaded public key’s fingerprint to the one available on the publisher’s page. This will help you ensure:

  • You’re using the correct one.
  • The key you downloaded is original and hasn’t been compromised by a malicious third party.

To do so:

  • In the terminal, navigate to the Download folder.
  • Type the command “gpg –fingerprint.” The command will show you all the fingerprints included in your local keyring.
verifying veracrypts public key
Image caption: In this example, I’m verifying VeraCrypt’s public key.
  • Look for the one related to the software you want to install and compare it with the fingerprint published on the website you downloaded it from.
fingerprint listed in my local keyring
Image caption: This is the fingerprint listed in my local keyring, which is a collection of keys and other secret components.
fingerprint displayed on veracrypt website
Image caption: This is the fingerprint displayed on VeraCrypt website.

Good news: They match! Now, you can feel confident that the VeraCrypt software you’ve installed hasn’t been tampered with. Now, it’s time to ensure that the software application is legitimate (i.e., authentic).

4. Download the Pretty Good Privacy (PGP) Signature File

If you haven’t already downloaded the PGP signature file with the installer, now it’s time to do it. In this example, we’ll download the file related to Ubuntu 20 as it’s the operating system version I have on the machine used for this demo.

  • Locate the PGP signature file link, click on it, and save it on your device.
pgp signature link to get the sig file
Image caption: On the software’s download page, look for the PGP signature link to get the .sig file you need to confirm the validity of the signature.

5. Verify the Signature of the Installer

This is the moment of truth: Is the software you’ve just downloaded the original, authentic version? To certify this:

  • Navigate to the folder where you saved the installer and the PGP signature file (e.g., Download folder).
  • Use the command “gpg –verify” followed by the .sig file and the installer.
how to check the digital signature of a file in linux
Image caption: The screenshot shows how to check the digital signature of a file in Linux.

If you got an output like the one above, saying, “Good signature,” then the file hasn’t been modified since it was signed. You can install it with confidence.

Is the “Good signature” message followed by another message (“WARNING: This key is not certified with a trusted signature! There is no indication that the signature belongs to the owner”), like in the example above? No worries — the key has been verified as valid. According to Ubuntu.com, the message is just there to inform you that you haven’t signed VeraCrypt’s key to mark it as being an item on your trusted keys list (i.e., web of trust). VeraCrypt.eu states that you must sign the imported key; otherwise, you’ll always see an error message stating that the signing key is invalid (as shown in the example below) when you try to verify its PGP signature.

valid key message followed by the alert
Image caption: The screenshot shows a valid key message followed by the alert that the key hasn’t been added to the device’s trust list.

What if you get a “BAD signature” message when you run the script? This means that something is wrong, and you should proceed with caution. To give you an example, I have downloaded Ubuntu 21 VeraCrypt installer and matched it with the incorrect PGP signature for Ubuntu 20. The result? A bad signature result, as demonstrated in the screenshot below:

bad signature from veracrypt team
Image caption: This is what you’ll see when the signature of a file for whatever reason isn’t valid: BAD signature.

That’s it! Quick, painless, and easy. Hold on, what if you have Windows? Can you check the digital signature of a file there too? Of course, you can! And it’s even easier. Read on.

How to Check a Digital Signature of a File in Windows 10

There are several ways to verify the signature of a code in a Windows operating system. We’ll use File Explorer, the most common method available to everyone, and that doesn’t require any additional software. This time, we’ll use the communication application Slack as an example to check its X.509 digital signature.

1. Navigate to the Folder Where You Saved the Installer

Once you’ve downloaded the installer file:

  • Click on the file icon on your taskbar.
file explorer icon in windows 10
Image caption: The screenshot shows the File Explorer icon in Windows 10.
  • Navigate to the location where the installer is saved.
installer saved in the downloads folder
Image caption: The image shows the installer saved in the Downloads folder.

2. View the File’s Digital Signature

Did you find the file? Good. Now:

  • Right-click on it and select Properties. This will open a new pop-up window.
  • In the new window, click on the Digital Signatures tab. If the file has been digitally signed, you’ll see the signer’s name, the algorithm used, and the timestamp (if any).
file has a digital signature
Image caption: When you select the file’s properties, if the file has a digital signature a pop-up window will show you all the details.

3. Verify the Digital Signature

To check if the signature is valid:

  • Click on the Details button.
view additional information about the digital signature
Image caption: Hit the Details button to view additional information about the digital signature.

A pop-up window will come up. Does it say, “This digital signature is OK?” Yippee! The signature is genuine.

confirmation that the digital signature is authentic
Image caption: The screenshot shows confirmation that the digital signature is authentic.

Want to know more details about the signature? Go through the signer information listed, and click on the View Certificate button to check the public key infrastructure (PKI) certificate used:

code signing certificate utilized to sign the file
Image caption: The screenshot shows the code signing certificate utilized to sign the file.

Navigate to the Details tab to learn more specifics about the certificate’s cryptographic security components and certificate Subject.

view additional information about the certificate
Image caption: By clicking on details, you’ll be able to view additional information about the certificate.

So, now that you know how to check file signatures, make sure you do it every time you download new software, because as an ancient English proverb said, “If you trust before you try, you may repent before you die.”

Are you a developer or a software house and you still don’t sign your codes? Discover six good reasons why you should release signed code and software. Additionally, here’s some information about what happens when you use or release unsigned code or software.

Final Thoughts on How to Check the Digital Signature of a File in Linux and Windows

Ransomware, spyware, and keyloggers are just a few examples of malware that could be included in a compromised file or executable. This is why in today’s digital environment, it’s no longer enough to

  • Trust the developer without validating their digital identity,
  • Blindly assume that the vendor’s website is safe, or even
  • Rely solely on the file checksum.

Are you a Linux user? GPG will help you confirm the validity of a digital signature in five simple steps. Windows users will get it done and dusted even faster, through File Explorer.   

Yup. No matter which operating system you use, what you’ve learned today will help you minimize the risks of downloading malware and keep your organization, and data secure. Goodbye unwanted, dangerous programs; welcome, secure downloads.

The post Tutorial: How to Check the Digital Signature of a File (in Linux and Windows) appeared first on Code Signing Store.

]]>
What Is a Docker Registry? An Explanation & Exploration of the 3 Types https://dev.codesigningstore.com/what-is-a-docker-registry Mon, 12 Jun 2023 04:50:46 +0000 https://codesigningstore.com/?p=437011 41% of tech organizations are planning to increase investments in cloud-based services and products in 2023. Want to get a piece of the pie? Uncover the power of the Docker registry for building, sharing, running, and quickly scaling cloud-native applications and learn how it can boost the security of your applications. 68.57% of professional developers… Continue reading What Is a Docker Registry? An Explanation & Exploration of the 3 Types

The post What Is a Docker Registry? An Explanation & Exploration of the 3 Types appeared first on Code Signing Store.

]]>
41% of tech organizations are planning to increase investments in cloud-based services and products in 2023. Want to get a piece of the pie? Uncover the power of the Docker registry for building, sharing, running, and quickly scaling cloud-native applications and learn how it can boost the security of your applications.

68.57% of professional developers interviewed in 2022 named Docker their number one tool of choice for software development activities. With the advent of cloud computing and the need for developing applications faster than ever before, the way organizations develop and run their applications has changed. 

The adoption of application containers like Docker has been skyrocketing, with the market anticipated to reach $14.14 billion by 2030. As a result, docker registries have become an essential part of any organization’s Agile software development strategy.

Want to successfully integrate Docker into your software development life cycle? You’ll need to fully understand what it is all about. In this article, you’ll learn:

  • What a docker registry is,
  • What it’s used for,
  • How it works,
  • What types of docker registries are available, and
  • Why a docker registry is important for developers and organizations alike.

Are you ready to explore the world of docker? Let’s get on with the motley.

What Is a Docker Registry?

Docker registry is a server-side platform used by software developers to create, store, manage, and distribute anywhere different reusable versions of Docker images. Docker images are standalone executables that include everything needed to run an application or service.

The images are then used as a template to instantiate (i.e., generate) a container (i.e., lightweight packages of application code and its dependencies) that will be utilized to run an application process or a service. Typically used to build containerization-based applications (i.e., apps comprised of independent components) and services, a Docker registry is a bit like a warehouse shelf filled with Docker images instead of goods.

docker registry

Image caption: This is how a Docker registry relates to images and containers.

Each Docker registry is divided into sections (i.e., Docker repositories), just like a warehouse shelf is divided into different sections containing different products. Each Docker repository includes various versions (i.e., tags) of a single Docker image and a description.

ubuntu docker

Image source: Ubuntu Docker. The screenshot shows Ubuntu’s image description included in the official Ubuntu Docker repository.

official ubuntu docker repository versions

Image source: Ubuntu Docker. These are the versions actually included in the official Ubuntu Docker repository.

Why Docker Registries Are Useful

According to Gartner, 65.9% of the money spent by organizations on traditional application software will be redirected to cloud-based products and services by 2025. With businesses shifting to cloud-native development and hybrid multi-cloud environments, Docker is becoming increasingly popular.

Anyone who has access to the Docker registry can upload an image, search for it, or download it. For example:

  • Software developers access the Docker registry to select the Docker images they need to build containers.
  • While application consumers use it to choose the Docker images needed to run services or web applications.

Why do you need it? Because it provides you application flexibility and portability. A Docker registry will also extremely simplify and automate your deployment process, even for the most complex applications.

Do you remember when we said that the Docker registry is like a warehouse shelf? Good. Now, think about the challenges a warehouse manager may face. At the beginning of my working career, I did work in a small warehouse. I can tell you that the issues you get are very similar to the issues you encounter in application development. For example:

  • How can you identify and/or prevent tampering with the products before they reach the stores?
  • How do you protect your products against counterfeits?
  • What process can you follow to deal with faulty products?
  • How can you limit access to the products and the warehouse to a restricted number of people of your choice?

Depending on the Docker registry type you choose, it may also protect application consumers from man-in-the-middle attacks and guarantee the integrity of your images.

Does it sound familiar? I bet it does. And guess what? The right Docker registry type will help you deal with these issues.

Moreover, it also:

  • Offers a centralized location for your images. Teams can easily store, search, manage, and share public and private images (select or all versions). 
  • Guarantees an enhanced level of security. 55% of the respondents to the 2022 Kubernetes and cloud-native operations survey, confirmed that the security of container-based images is the top criteria for image selection. Docker private Registry and Docker Trusted Registry (more on these in a minute) can fulfill that requirement through access control and image signing.
  • Saves time and resources. Thanks to automation, flexible version management, and integration with the development workflow.
  • It’s easily integrated with other tools and scalable. A Docker Registry can integrate with tools like Kubernetes, GitHub, and Jenkins. The advantage? For example, images created from the codes tested in GitHub can be added to Docker Registry to tackle inconsistencies and bugs.

Now that we know what benefits Docker registries offer, let’s find out how they work.

How Does a Docker Registry Work?

Before we get into the nitty-gritty of the different Docker registry types available, we have to first understand how a Docker registry works. Let’s say you’re a developer who wants to build a containerized application. To create a container, you’ll usually:

  1. Create a DockerFile. This is a text file with a standardized command-line interface (CLI) instructions to automatically build a Docker image.
  2. Build and save Docker images. Each image is made up of layers, and each layer represents one specific version of each image.
  3. Upload your Docker images to the Docker registry. This is where the Docker registry comes into play. Once the images are created, you’ll need a place to store and manage them.
create docker image and upload to docker registry

Image caption: The graphic shows the process developers follow to create a Docker image and upload it to a Docker registry.

That’s it. Now, other users can access the Docker registry and search and/or download the image you’ve just uploaded to use for their development project or to run as a container.

the role of docker registry in image storage

Image caption: The graphic shows how a Docker registry facilitates Docker image storage, search, and sharing.

What Types of Docker Registries Are Out There?

The term “Docker registry” can sometimes be a bit confusing as it can be used to indicate two different (but also similar) things with the same purpose. If you noticed, up till now we’ve written Docker registry with a lowercase “r.” This is because we used the term to refer to any tool or service used to store and distribute container images, like those listed below:

  • DockerHub. This is one of the largest repositories with thousands of Docker images stored in public and private (more on that in a minute) Docker Registries. It integrates with the most used version control systems like GitHub and BitBucket.
  • Amazon Elastic Container Registry (ECR). Offering seamless integration with AWS Identity and Access Management (IAM) service for authentication, it supports private and public Docker registries. Among its features includes vulnerability image scanning and immutable image tags (i.e., it’s impossible to override an image once pushed to the registry),
  • Azure Container Registry (ACR). Supporting multi-region registries and Active Directory authentication, ACR offers automatic purging of old images, retention policies, and content trust.
  • Google Artifact Registry (GAR). Previously called GCR, it’s hosted on the Google Cloud Platform and features automated image builds through Google Cloud Source Repositories, GitHub, and Bitbucket integrations. It also includes a vulnerability scan, and it integrates perfectly with CI/CD pipelines to help you streamline container deployments.
  • GitHub Package Registry. Free for public images, GitHub Package Registry offers enhanced security permissions and supports public and private image storage. Authentication is managed via personal access token or a GitHub account if you use a public repository.
  • Red Hut Quay. Offering a secure and scalable Docker registry platform for private cloud development projects, Red Hut Quay integrates with GitHub, BitBucket, GitLab, Red Hat OpenShift, and more. 

And then, there is Docker Registry (with a capital R). This is Docker’s project official tool to store, manage and distribute images supported by DockerHub.

Hold your horses, though, because there’s more. Before plunging headlong to pick your favorite Docker registry, there’s still something you’ll have to consider: what kind of Docker registry features do you need?

There are three docker registry types and each one offers different features, just like the three caravels (i.e., Spanish or Portuguese sailing ships) used by Columbus to get to America:

  • The Docker public Registry,
  • The Docker private Registry, and
  • The Docker Trusted Registry (DTR).

Time to explore all of them, one by one, more in depth.

Docker Registries: The Public, Private, and Trusted

Did you know that more than 18 million developers are already using Docker to build their applications? This includes small businesses, freelance developers, and big corporations. They all have different needs addressed by one or another Docker Registry flavor. Which one is the right one for you? Read on to find it out.

If you’d rather skim the content and base your choice on a high-level overview, then check out our summary table:

Docker Public CharacteristicsDocker Public RegistryDocker Private RegistryDocker Trusted Registry
Image Types
  • Proprietary images
  • Standardized public images
  • Proprietary images
Limits
  • Users can pull a limited number of images per hour
  • Possible bandwidth limit and throttling
  • No limits, apart from those imposed by the organization using the Docker registry
  • No limits, aside from those imposed by the organization using the Docker registry
Features
  • Only basic features available
  • Granular and personalized access control
  • Image vulnerability scanning
  • Users tracking
  • Encrypted connections using an SSL/TLS certificate
  • Image signing
  • Granular and personalized access control
  • Image vulnerability scanning
  • User tracking
  • Encrypted connections using an SSL/TLS certificate
  • Image signing
  • Only signed images can be uploaded to the Registry
Security Level
  • Low
  • Medium
  • Higher
Access Level
  • Open to everyone
  • Restricted
  • Restricted
Ideal for 
  • Individuals and small businesses.
  • Medium and large organizations.
  • Medium and large organizations.
    Cost
  • Free.
  • Paid.
  • Paid.

1. The Docker Public Registry

This is the first type of Docker registry I played with during my career. It’s easy to use and it doesn’t cost a penny. Ideal for small businesses and individuals with limited budgets, anyone can upload or download images for free.

The downsides? Like all free products, there are a bunch:

  • Users are allowed to pull only a limited number of images per hour.
  • The features offered are minimal.
  • They might have bandwidth limits and throttling.
  • Security and privacy can be an issue. As everyone can access it, privacy isn’t an option, making it unsuitable for storing proprietary images. Access control and patch management aren’t on the menu, either.
  • When the service is down, you’ll have to wait for the provider to fix the issue.

However, if you’re a start-up or a small organization, with the right precautions, standardized and open-source images offered by a Docker public registry can still be a decent alternative to more expensive solutions. They’ll also enable you to share them with all your teams and communities without worrying too much about access.

Just remember to download only trusted images and scan them for vulnerabilities before using them. Don’t forget that DockerHub’s free Autobuild service was abused to mine cryptocurrencies. Bad guys are everywhere!

2. The Docker Private Registry

Did you ever have to slow down or even delay an application deployment project because of security concerns, like 67% of enterprises interviewed by RedHat? If you’re looking for a more secure environment, a few extra features, and privacy without breaking the bank, then a Docker private registry may be the right choice for you.

Among its features, a Docker private registry includes:

  • Distribution and sharing of images in an isolated network. This will prevent you from sending images over insecure internet connections.
  • Possibility of picking your favorite hosting option. You’ll be able to choose between a remotely hosted Docker private Registry (e.g., commercial services like the ones we mentioned at the beginning of this article) or an on-premises option to cut deployment latency.
  • Granular and personalized access control (e.g., based on roles). Grant upload and download access to developers while giving download access only to testers and other team members. Define chains of approval and verification. Taking this approach will help you protect your organization against breaches.
  • Security options. Scan your images for vulnerabilities at any stage of your development process. Install patches and track users’ activities in auditable logs. To protect your images from tampering, malware, and man-in-the-middle attacks, you can also add a digital signature to the most critical images of your collection (more on this in a moment) and use a secure socket layer/transport layer security (SSL/TLS) certificate to encrypt the connection.
how ssl certificate protect your docker registry

Image caption: The SSL/TLS certificate can protect your Docker registry from man-in-the-middle attacks.

3. The Docker Trusted Registry (DTR)

As organizations are shifting their development processes to the cloud, concerns about cloud security are steadily growing. According to a Cybersecurity Insiders report, 95% of organizations’ security professionals are moderately to extremely concerned about cloud security.

Who could blame them, when 84% of open-source codebases scanned in 2022 contained at least one vulnerability? That’s why validating the integrity and authenticity of all images pulled from Docker registries has become essential.

How can you do that? In our previous point, among the security features we listed, we mentioned the possibility of uploading signed images to the Docker private Registry. The Docker Trusted Registry (DTR), Docker’s image storage solution for enterprises, takes this to another level.

In fact, it allows you to store and download digitally signed images only, guaranteeing their authenticity and protecting them from unauthorized modification. As a result, application consumers are, in turn, protected by man-in-the-middle attacks.

To go back to our warehouse example, the Docker trusted Registry is a bit like those heavily guarded warehouses. Nothing gets in or out without being identified (image signature) and checked for anomalies first.

Why is it important? When a developer pushes their image to a Docker registry, the image with all its version layers (sometimes controlled by other developers or teams), is made available to everyone who has access to the registry.

So, how can users downloading the image be sure that it has not been tampered with, and that it is really coming from a trusted source? How can you validate the security of the images throughout the whole software development life cycle? This is where the digital signature comes in.

There are several ways to sign an image. But, in general, before uploading the image to the Docker trusted Registry, the developer uses a tool of their choice (e.g., the Docker Content Trust [DCT] tool, Harbor, or JFrog Artifactory) to:

  1. Hash the file using a strong algorithm (e.g., SHA-256),
  2. Encrypt the outcome (i.e., digest) with his private key,
  3. Create the digital signature block by adding his code signing certificate to the image.

Now the image is ready to be uploaded to the DTR.

image signing process

Image caption: The graphic shows the Docker Image signing process.

What happens when a user downloads the signed image? The signature is validated by decrypting the digest with the public key (usually fetched from a signature store or a local directory) and comparing the hashes. If they match, the signature is valid, and the image integrity hasn’t been compromised since it was signed.

Does all this sound familiar? Yup, essentially the same PKI-based process used by code signing and .exe file signing.

Check this short video showing an example of how a signed image is uploaded to DTR:

Do your security policies require images to be signed by multiple parties or more than once during the SDLC? “Don’t worry, be happy” like Bob McFerry sang. Each image can have multiple signatures, from the same signer or multiple signers. Bye-bye risky or suspicious images!

Final Thoughts on What a Docker Registry Is

Did we answer the question, “What is a Docker Registry?” In layman’s terms, a Docker Registry is a great way to effectively create, manage and distribute container/Docker images. It enables developers and organizations to achieve super-fast software delivery without compromising on automation, and, in some cases, security.

Docker registries come in different flavors. By using the Docker public Registry, smaller businesses, and individuals can take advantage of standardized, easily accessible, and open-source images. While corporations and big enterprises in need of a more secure environment can keep their proprietary images private by investing in a Docker private registry. 

Last but not least, Docker registries facilitate automation, streamline collaboration and processes through other platforms integration (e.g., GitHub and BitBucket). And with containerization quickly replacing the traditional development environment, Docker registries have become something organizations can’t do without.

The post What Is a Docker Registry? An Explanation & Exploration of the 3 Types appeared first on Code Signing Store.

]]>