Making the monsters a little different isn't a challenge on its own, but we want something that's quick and simple to set up, and doesn't slow things down when running the game. Luckily, there is a way:
|1||Heavy armor: +4 AC||Light armor: -4 AC|
|2||Fast: +10' move||Slow: -10' move|
|3||Tough: +50% HP||Weak: -50% HP|
|4||Fortunate (physical): Advantage on Strength/Dexterity/Constitution Saving Throws||Unfortunate (physical): Disadvantage on Strength/Dexterity/Constitution Saving Throws|
|5||Fortunate (mental): Advantage on Intelligence/Wisdom/Charisma Saving Throws||Unfortunate (mental): Disadvantage on Intelligence/Wisdom/Charisma Saving Throws|
|6||Talented: Advantage on attribute checks||Untalented: Disadvantage on attribute checks|
For each creature you want some variation of, roll twice on the table, once for the boon, once for the bane. If you get the same number on both rolls, the creature is just normal, and has neither effect. All you need to note for each creature is what you rolled as long as you have the table handy.
Not every Boon and Bane on creature will cancel-out to be perfectly balanced, but in larger and multiple groups, they will average out. A single tough and slow creature will effectively have a higher CR, but as the party face many creatures with different variations, it shouldn't be a worry.
A nice side-effect is that the Boon/Bane combinations is they can give the creatures some roles/tactics in the group. Talented creatures might opt for grappling/shoving, weak creatures prefer staying at range, etc.
Feel free to customize the table to fit the creatures and the PCs -- at low levels the HP and AC modifiers might need to be a little smaller, or you might want to switch or add a modifier for size/reach variation if that makes sense for the creatures in question, etc.